Tek Kullanımlık Numaralandırıcılar
Tek Kullanımlık Numaralandırıcılar
Bazen bir numaralandırıcı, veritabanı bağlantısı gibi değerli bir kaynağa sahiptir. Kaynaklar, numaralandırıcı sonlandırıldığında serbest bırakılacaktır, ancak numaralandırıcıya artık ihtiyaç duyulmadığında kaynağın serbest bırakılması faydalı olacaktır. Bu nedenle, bir foreach’in genişletilmesi, daha önce ima edildiği kadar basit değildir.
C# derleyicisi bunu, using deyimine benzer bir şekilde, IDisposable arabirimine güvenerek yapar. Ancak bu durumda işler biraz daha karmaşık. using deyimi için, derleyicinin sınıfın IDisposable’ı uygulayıp uygulamadığını belirlemesi kolaydır, ancak bu durumda bu doğru değildir. Derleyici genişlediğinde üç durumu ele almalıdır.
Derleyici statik olarak bir sınıfın IDisposable’ı uyguladığını biliyorsa, derleyici dinamik test olmadan Dispose()’u çağırır.
Tasarım Kuralları
İndeksleyicileri yalnızca soyutlamanın anlamlı olduğu durumlarda kullanmalısınız. Bu genellikle nesnenin başka bir nesne için kapsayıcı olup olmadığına bağlıdır.
VB .NET, C#’ın bir dizin oluşturucu olarak adlandırdığı şeyi varsayılan bir özellik olarak görüntüler ve bir sınıf, bir VB .NET programında birden fazla dizine alınmış özelliğe sahip olabilir. C#, bir dizin oluşturucuyu, bir nesnenin dizinlenmiş türden oluştuğunun bir göstergesi olarak gördüğünden, VB .NET görünümü, C# perspektifiyle eşleşmez (bir nesne nasıl iki farklı türde bir dizi olabilir?). Bu nedenle C#, yalnızca varsayılan dizinlenmiş özelliğe doğrudan erişime izin verir.
C# dizin oluşturucusuna Öğe adını verir, bu ad hiçbir zaman kullanılmadığı için C# açısından uygundur. Ancak VB .NET gibi diller adı görür ve bu nedenle adı Öğe dışında bir şeye ayarlamak yararlı olabilir. Bunu, IndexerNameAttribute öğesini indeksleyiciye yerleştirerek yapabilirsiniz. (Bu özniteliği System.Runtime.CompilerServices ad alanında bulabilirsiniz.)
Son olarak, numaralandırılabilir türleri uygulamak için yineleyicileri (sonra ele alınacaktır) kullanabilirsiniz. Yineleyiciler, numaralandırıcı uygulamasının sıkıcı işini derleyiciye yükleyerek hata olasılığını azaltır ve türlerin kodlanmasını kolaylaştırır.
Yineleyiciler
Bu bölümde daha önce sunulan IntListEnumerator sınıfının uygulamasına bakıldığında, koleksiyondaki Current özelliği tarafından döndürülmesi gereken öğeyi ve bir parçasını oluşturan öğe sayacını izleyen temel bir durum makinesinin uygulandığı açıktır. durum makinesi MoveNext yöntemiyle geliştirildi.
Bir dizi üzerinde numaralandıran bir IEnumerator-uygulama nesnesini uygulama modeli iyi yapılandırılmıştır ve biraz yardımla derleyici numaralandırıcıyı üretebilir. C# 2.0’da numaralandırıcı yazma sürecini önemli ölçüde basitleştiren yeni bir özellik olan yineleyicilerin arkasındaki fikir budur.
Bir koleksiyonun değerlerini sıralı bir şekilde döndüren verim dönüş deyimlerini kullanarak bir yineleyici uygulayabilirsiniz. verim’in yeni bir anahtar kelime olarak tanıtılması, başlangıçta bir değişken adı olarak verim içeren geniş bir C# 1.0 kod tabanına sahip programcılar için uyumluluk endişelerini artırabilir, ancak bu, herhangi bir uyumluluk sorununa neden olmaz, çünkü verim yalnızca bağlamında bir anahtar kelimedir. bir verim iade beyanı; C# 2.0’da bir değişken adı olarak getiri olmadan yine de verim kullanabilirsiniz.
Numaralandırıcıyı yineleyiciler kullanarak oluşturmak, geliştiricinin yazması gereken kodu önemli ölçüde azaltır. Kapakların altında, derleyici, Reset yöntemi dışında, bu bölümde daha önce sunulan IntListEnumerator ile işlevsel olarak aynı olan iç içe geçmiş bir sınıf oluşturacaktır.
Sıfırlama çok önemli bir yöntem değildir, çünkü yalnızca yeni bir Numaralandırıcı nesnesi oluşturarak bir koleksiyon için bir Numaralandırıcıyı ilk durumunda elde etmek her zaman mümkündür. Bir yineleyici tarafından oluşturulan kod, Sıfırlama çağrılırsa bir NotSupportedException istisnası atar.
Yineleyicilerin çalışma zamanı desteği yoktur ve yalnızca C# derleyici tarafından sağlanan bir özelliktir. Numaralandırma uygulamalarını sağlamayı bu kadar kolay hale getirerek, geliştiricinin tipik tam koleksiyon yalnızca ileriye yönelik numaralandırıcıdan daha fazla numaralandırma teklifi sunması daha olasıdır. Bir koleksiyonun bir alt kümesi üzerinde numaralandırmayı destekleyecek çift yönlü bir numaralandırıcı sağlamak, yineleyicileri kullanarak uygulamak kolaydır.
GetEnumerator yöntemi tarafından döndürülen IEnumerator başvurusunun aksine, BidirectionalSubrange’ın bir IEnumerable başvurusu döndürdüğüne dikkat edin. Tek bir yineleyici içinde birden çok alanlı dönüş ifadeleri kullanmak mümkündür. Örneğin, bir kişinin adlarını aşağıdaki şekilde sıralayabilirsiniz.
Ücretsiz tek kullanımlık telefon numarası
Tek kullanımlık telefon numarası Türkiye
Türk sms doğrulama sitesi
10 dakikalık telefon numarası Türkiye
Tek kullanımlık SMS alma
90 sms onay ücretsiz
90 geçici telefon numarası
Geçici numara
Karmaşık Numaralandırma Modelleri
Önceki örnek biraz yapmacık olsa da, ton stili dönüş ifadeleri yeteneği, karmaşık koleksiyonlar üzerinde numaralandırma yazmayı oldukça kolaylaştırır. Her anahtara karşı birden çok değerin saklanmasına izin veren bir karma tablo düşünün; bu koleksiyon, fatura kimliğinden bir faturadaki her satır öğesini girmek gibi birçok gerçek dünya ilişkisini modellemek için kullanışlıdır.
Yineleyiciler olmadan, bir anahtar, ardından değer koleksiyonunun her bir üyesini, ardından bir sonraki anahtarı, ardından değer koleksiyonunun her bir üyesini vb. döndüren bir numaralandırıcı sağlamak için durum makinesini oluşturmak oldukça zor olacaktır. Bu numaralandırıcıyı yineleyicilerle yazmak oldukça basittir.
Biri anahtar için, diğeri her değer için iki ayrı verim dönüşü ifadesinin (örnekte italiklerle vurgulanmış) kullanıldığına dikkat edin.
Bir yineleyici bloktan çıkmak için verim molası deyimini kullanabilirsiniz. Bir verim molası ifadesi, bir dönüş ifadesiyle hemen hemen aynı şekilde davranır ve yineleyici içinde bir nihayet bloğu varsa, verim kırılmasının bir sonucu olarak yürütülür. İstemci kodu açısından bakıldığında, numaralandırma tamamlanmış gibi bir verim kesmesi görünür ve ardından MoveNext’e yapılan çağrılar false döndürür.
Genel Numaralandırma
Genel numaralandırmayı uygulamak için yineleyicileri de kullanabilirsiniz. Genel bir yineleyici uygulamak için gereken tek değişiklik, işlevin dönüş türünü IEnumerator ve IEnumerable’dan IEnumerator<T> ve IEnumerable<T>’ye değiştirmektir. Gerçek yineleyici kodu değişmeden kalır. Önceki IntList sınıfını genel bir eşdeğere dönüştürerek aşağıdakileri elde edersiniz.
Tasarım Kuralları
Yineleyiciler, koleksiyon ve koleksiyon benzeri sınıflar üzerinde numaralandırıcı yazmayı çok daha kolaylaştırır. Yineleyiciler, koleksiyondaki belirli bir numaralandırmanın bittiği konumu izlemek için gereken durum makinesinin uygulamasının yükünü boşaltarak, en karmaşık numaralandırmaları bile uygulamak için gereken C# kodunu önemli ölçüde basitleştirir.
Tüm kod basitleştirme özelliklerinde olduğu gibi, özellikle yeni olanlarda, başlangıçta özelliği aşırı kullanma eğilimi vardır. Yineleyiciler söz konusu olduğunda bu aşırı derecede zararlı olmasa da, zengin bir dizi numaralandırma seçeneği sunmak ile koleksiyonun dahili uygulamasını değiştirmeyi zahmetli hale getirebilecek fazla sayıda numaralandırıcı ile bir sınıfı tıkamaktan kaçınmak arasında bir denge kurmaya çalışmalısınız.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)