Koleksiyon Sınıfları
Koleksiyon Sınıfları
Kavramsal olarak, bu bölüm hangi sınıfların mevcut olduğuna dair bir genel bakış sunar. Daha sonra bunları sınıfa göre ele alır ve belirli işlevleri etkinleştirmek için hangi arabirimlerin ve işlevlerin gerekli olduğuna dair örnekler verir. Son olarak, bölüm yeni jenerik koleksiyonları kapsar.
Sıralama ve Arama
.NET Framework toplama sınıfları, sıralama ve ikili arama yapan yerleşik işlevlerle sıralama ve arama için bazı yararlı destekler sağlar. Array sınıfı, üye işlevler yerine statik işlevler olarak aynı işlevselliği sağlar.
Bu, yerleşik türler için uygundur, ancak sınıflar veya yapılar için çalışmaz çünkü sıralama yordamı onları nasıl sıralayacağını bilmez.
IComparable’ı uygulama
.NET Framework, sınıf veya yapı örneklerinin nasıl sıralanacağını belirtmek için bir sınıf veya yapı için bazı güzel yöntemlere sahiptir. En basitinde, nesne IComparable arayüzünü uygular.
Bu sıralama uygulaması yalnızca bir sıralama düzenine izin verir; sınıfı, çalışan kimliğine veya ada göre sıralanacak şekilde tanımlayabilirsiniz, ancak kullanıcının hangi sıralama düzenini tercih ettiğini seçmesine izin vermenin bir yolu yoktur.
Bu örnek ayrıca listede bir çalışanı bulmak için BinarySearch() yöntemini kullanır. Bunun çalışması için dizinin (veya ArrayList’in) sıralanması gerekir, aksi takdirde sonuçlar doğru olmaz.
IComparer’ı kullanma
.NET Framework tasarımcıları, birden çok sıralama düzeni tanımlama yeteneği sağlamıştır. Her sıralama düzeni, IComparer arabirimi aracılığıyla ifade edilir ve uygun arabirim, sıralama veya arama işlevine geçirilir.
Ancak, IComparer arabirimi Çalışan üzerinde uygulanamaz, çünkü her sınıf bir arabirimi yalnızca bir kez uygulayabilir, bu da yalnızca tek bir sıralama düzenine izin verir.1 IComparer’ı uygulayan sınıfla her sıralama düzeni için ayrı bir sınıfa ihtiyacınız vardır. Yapacağı tek şey Compare() işlevini uygulamak olduğu için sınıf basit olacaktır.
Compare() üyesi iki nesneyi parametre olarak alır. Sınıfın yalnızca çalışanları sıralamak için kullanılması gerektiğinden, nesne parametreleri Çalışan’a dönüştürülür. Dize içinde yerleşik olan Compare() işlevi daha sonra karşılaştırma için kullanılır.
Kullanıcı artık sıralama düzenini belirleyebilir ve farklı sıralama düzenleri arasında istediği gibi geçiş yapabilir. Bu örnek, Sort() statik bir işlevden ziyade bir üye işlev olmasına rağmen, aynı işlevlerin ArrayList sınıfını kullanarak nasıl çalıştığını gösterir.
Özellik Olarak Karşılaştırıcı
Kullanıcının uygun sıralama sınıfının bir örneğini oluşturması ve ardından bunu IComparer’a aktarması gerektiğinden, Çalışan sınıfıyla sıralama yapmak biraz zahmetlidir. Kullanıcı için bunu yapmak için statik özellikleri kullanarak bunu biraz daha basitleştirebilirsiniz.
SortByName ve SortById statik özellikleri, uygun sıralama sınıfının bir örneğini oluşturur, bunu IComparer’a aktarır ve kullanıcıya döndürür. Bu, kullanıcı modelini oldukça basitleştirir; SortByName ve SortById özellikleri bir IComparer döndürür, dolayısıyla sıralama için kullanılabilecekleri açıktır ve kullanıcının tek yapması gereken, IComparer parametresi için uygun sıralama özelliğini belirtmektir.
C koleksiyon örnekleri
C# koleksiyonlar nedir
C koleksiyon Örnekleri
C Generic koleksiyonlar
C# Collections
C# Capacity nedir
Kalıtım oluşturma
Parametre dizileri
İlişkisel Operatörleri Aşırı Yükleme
Bir sınıfın IComparable’da ifade edilen bir sıralaması varsa, diğer ilişkisel işleçleri aşırı yüklemek de mantıklı olabilir. == ve != ile olduğu gibi, diğer işleçler çift olarak bildirilmelidir, < ve > bir çift ve >= ve <= diğer çifttir.
Genel Karşılaştırma
Jenerikler için başlıca kullanım durumlarından biri koleksiyon sınıflarıdır, bu nedenle IComparable ve IComparer gibi koleksiyonlarla ilgili arayüzlerin jenerik bir sürümle zenginleştirilmesi şaşırtıcı değildir. Bu bölümde daha önce açıklanan genel olmayan sürümler var olmaya devam eder ve yeni arabirimler, System adlı yeni bir ad alanındadır.
Koleksiyonlar.Genel. Türü kesin olarak belirlenmiş karşılaştırma yöntemlerine ek olarak, yeni genel arabirimler, türü kesin olarak belirlenmiş bir Equals yöntemine sahip IComparable<T> ve kesin olarak yazılmış Equals ve GetHashCode yöntemlerine sahip IComparer<T> ile genel olmayan eşdeğerlerinden biraz daha zengindir.
Beklendiği gibi, çıktı genel olmayan sürümle aynıdır ve yalnızca kodun tür güvenliği ve hızı iyileştirilmiştir. Bunun yerine jenerik kullanmak için IComparer kullanan ikinci örneği de güncelleyebilirsiniz.
Bu bölümde daha önce ilgili örnekte kullanılan ArrayList yerine genel List<T> koleksiyonunun kullanıldığına dikkat edin. Önceki liste ayrıca Array’in genel Sıralama yöntemini kullanıyordu.
İlk jenerik örnekte olduğu gibi, çıktı jenerik olmayan eşdeğer ile aynıdır. “IComparer As a Property” örneğini kağıt tasarrufu açısından burada yeniden basmadık, ancak Apress Web sitesinin İndirilenler bölümünde bulunan kitabın koduna eşlik ediyor.
Karmaların Gelişmiş Kullanımı
Bazı durumlarda, belirli bir nesne için birden fazla hash kodu tanımlamak istenebilir. Bunu, örneğin, bir çalışanın çalışan kimliğine veya çalışan adına göre aranmasına izin vermek için kullanabilirsiniz. Bunu, alternatif bir karma işlevi sağlamak için IHashCodeProvider arabirimini uygulayarak yapabilirsiniz ve bu aynı zamanda eşleşen bir IComparer uygulaması gerektirir. Bu yeni uygulamalar, Hashtable’ın kurucusuna şu şekilde iletilir.
Bu tekniği idareli kullanmalısınız. Çalışan adı gibi bir değeri bir özellik olarak göstermek ve bunun yerine bir karma anahtar olarak kullanılmasına izin vermek genellikle daha kolaydır.
Senkronize Koleksiyonlar
ArrayList gibi bir koleksiyon sınıfı oluşturulduğunda, iş parçacığı açısından güvenli değildir, çünkü böyle bir sınıfa senkronizasyon eklemek biraz ek yük getirir. İş parçacığı için güvenli bir sürüme ihtiyacınız varsa, listeye iş parçacığı için güvenli bir sarıcı almak için Synchronized() yöntemini çağırmanız yeterlidir.
Büyük/Küçük Harfe Duyarsız Koleksiyonlar
.NET Framework, dizeleri büyük/küçük harfe duyarsız bir şekilde ele almak için SortedList ve Hashtable koleksiyon sınıflarının büyük/küçük harfe duyarsız sürümlerini oluşturmak için bir yol sağlar. Bu destek, System.Collections.Specialized ad alanındaki CollectionsUtil sınıfı aracılığıyla CreateCaseInresponsiveSortedList() veya CreateCaseInSensitifHashtable() işlevi çağrılarak sağlanır.
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)