Genellikle bu tür davranışı yalnızca durumlarda gerekli olan bir arabirim bağlı değildir bazı işlevleri içeren nerede jenerik tip parametreleri. Arayüzler üzerinde kontrole sahipseniz, en iyi çözüm, türe bağlı olmayan bölümden tip-bağımlı parçaların miras almasıdır. Mevcut toplama arayüzleri olmasaydı Örneğin, bir onlara şöyle tanımlayabilirsiniz:
interface ICountable
{ CollectionAttribute Attributes {get;} int Count {get;} }
interface ICollection<T> : IEnumerable<T> ICountable
{ ... and other stuff ... }
böyle bir şey ICollection
ile gerçekleştirilmiş olsaydı, o zaman kod bir IEnumerable<Animal>
bekliyordum ama tip CatList
bir nesne var Bu, yalnızca IList<Cat>
öğesinin bu nesnenin Count
üyesini kullanarak hiçbir sorunu olmaz (List<Animal>
, jenerik olmayan ICollection
'u uygular, ancak diğer IList<Animal>
uygulamaları olmayabilir). Eğer bir IEnumerable<Animal>
bekliyorsanız zaman nasılsa ICollection<Cat>
ait Count
yöntemi bulmak koduna sahip göreviyle takılıp
Olduğu gibi, yüzden bir Dictionary<Type, Func<IEnumerable<Animal>, int>
gibi bir şey inşa etmek faydalı olabilir Eğer ettik kez o CatList
'un ICollection<Cat>.Count
değerini bulduğunu, argümanını ICollection<Cat>
'a çevirecek, Count
numaralı telefonu arayacak ve sonucunu döndürecek bir yönteme delege oluşturabilirsiniz. Böyle bir sözlüğünüz varsa, başka bir CatList
verilirse, söz konusu delege sözlüğünden basitçe çağırabilirsiniz.
Bir "MyInterface" arabirimi oluşturmayı düşündünüz ve "MyInterface: MyInterface'? –