Genel sınıflar, belirli bir veri türüne özgü olmayan işlemleri kapsüller. Genel sınıflar için en yaygın kullanım, bağlantılı listeler, karma tablolar, yığınlar, kuyruklar, ağaçlar vb. gibi koleksiyonlarla kullanılır. Koleksiyondan öğe ekleme ve kaldırma gibi işlemler, depolanmakta olan veri türüne bakılmaksızın temel olarak aynı şekilde gerçekleştirilir.
Koleksiyon sınıfları gerektiren çoğu senaryoda, önerilen yaklaşım .NET sınıf kitaplığında sağlananları kullanmaktır. Bu sınıfları kullanma hakkında daha fazla bilgi için bkz . .NET'te Genel Koleksiyonlar.
Genel olarak, mevcut somut bir sınıfla başlayıp genelleştirme ve kullanılabilirlik için en uygun dengeye ulaşana kadar türleri birer birer tür parametrelerine dönüştürerek genel sınıflar oluşturursunuz. Kendi genel sınıflarınızı oluştururken dikkat edilmesi gereken önemli noktalar şunlardır:
Tür parametrelerine genelleştirebileceğiniz türler.
Kural olarak, ne kadar çok tür parametreleştirebilirseniz kodunuz o kadar esnek ve yeniden kullanılabilir hale gelir. Ancak çok fazla genelleştirme, diğer geliştiricilerin okuması veya anlaması zor olan kodlar oluşturabilir.
Varsa tür parametrelerine uygulanacak kısıtlamalar (Bkz. Tür Parametrelerindeki Kısıtlamalar).
İyi bir kural, işlemeniz gereken türleri işlemenize izin verecek mümkün olan en yüksek kısıtlamaları uygulamaktır. Örneğin, genel sınıfınızın yalnızca başvuru türleriyle kullanılmak üzere tasarlandığını biliyorsanız, sınıf kısıtlamasını uygulayın. Bu, sınıfınızın değer türleriyle istenmeyen kullanımını engeller ve üzerinde Tişlecini as kullanmanıza ve null değerleri denetlemenize olanak tanır.
Genel davranışın temel sınıflara ve alt sınıflara dahil edilip edilmeyeceği.
Genel sınıflar temel sınıflar olarak hizmet ettiğinden, burada genel olmayan sınıflarla aynı tasarım konuları geçerlidir. Bu konunun devamında yer alan genel temel sınıflardan devralma ile ilgili kurallara bakın.
Bir veya daha fazla genel arabirim uygulanıp uygulanmayacağı.
Örneğin, generics tabanlı bir koleksiyonda öğe oluşturmak için kullanılacak bir sınıf tasarlarsanız, sınıfınızın türü nerede T gibi IComparable<T> bir arabirim uygulamanız gerekebilir.
Basit bir genel sınıf örneği için bkz . Genel Türlere Giriş.
Tür parametrelerinin ve kısıtlamalarının kurallarının, özellikle devralma ve üye erişilebilirliği ile ilgili genel sınıf davranışı üzerinde çeşitli etkileri vardır. Devam etmeden önce bazı terimleri anlamanız gerekir. Genel bir sınıf Node<T>için, istemci kodu bir tür bağımsız değişkeni belirterek sınıfa başvurabilir - kapalı oluşturulmuş bir tür (Node<int> oluşturmak için) veya tür parametresini belirtilmemiş bırakarak (örneğin, genel bir temel sınıf belirttiğinizde, açık bir oluşturulmuş tür (Node<T> ) oluşturmak için). Genel sınıflar somut, kapalı veya açık yapılı temel sınıflardan devralabilir:
Genel olmayan, diğer bir deyişle, somut sınıflar kapalı oluşturulmuş temel sınıflardan devralabilir, ancak açık oluşturulmuş sınıflardan veya tür parametrelerinden devralabilir, çünkü istemci kodunun temel sınıfın örneğini oluşturmak için gereken tür bağımsız değişkenini sağlamasının çalışma zamanında hiçbir yolu yoktur.
C#
//No errorclassNode1 : BaseNodeGeneric<int> { }
//Generates an error//class Node2 : BaseNodeGeneric<T> {}//Generates an error//class Node3 : T {}
Açık oluşturulmuş türlerden devralan genel sınıfların, aşağıdaki kodda gösterildiği gibi devralan sınıf tarafından paylaşılmayan temel sınıf türü parametreleri için tür bağımsız değişkenleri sağlaması gerekir:
Genel bir sınıf bir arabirim uygularsa, bu sınıfın tüm örnekleri bu arabirime yayınlanabilir.
Genel sınıflar sabit. Başka bir deyişle, bir giriş parametresi bir List<BaseClass>belirtirse, bir sağlamaya List<DerivedClass>çalışırsanız derleme zamanı hatası alırsınız.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.