13 Temmuz 2009, PAZARTESİ
Bir yazın var mı diye bakıyorum uygulayan bir genel arabirim
Hadi bir türü var, MyType söylüyorlar. Aşağıdaki: yapmak istiyorum
- Eğer MyType IList arabirimi, bazı T. için uygular öğrenin
- Eğer cevap (1) evet ise, T ne olduğunu öğrenin.
Bunu yapmanın yolu Getİnterface gibi görünüyor(), ama bu sadece sana özel bir adı ile arama yapmanıza olanak sağlar. İ aramak için bir yoldur "şeklindeki tüm arayüzleri" (mümkünse am ... ayrıca eğer arayüzü eğer işe yaradıysa yararlı IList bir adres.) IList
İlgili: How to determine if a type implements a specific generic interface type
CEVAP
13 Temmuz 2009, PAZARTESİ
// this conditional is necessary if myType can be an interface,
// because an interface doesn't implement itself: for example,
// typeof (IList<int>).GetInterfaces () does not contain IList<int>!
if (myType.IsInterface && myType.IsGenericType &&
myType.GetGenericTypeDefinition () == typeof (IList<>))
return myType.GetGenericArguments ()[0] ;
foreach (var i in myType.GetInterfaces ())
if (i.IsGenericType && i.GetGenericTypeDefinition () == typeof (IList<>))
return i.GetGenericArguments ()[0] ;
Düzenleme:myType
uygular hatta IDerivedFromList<>
ama doğrudan değil IList<>
, IList<>
Dizi GetInterfaces()
tarafından döndürülen görünecektir.
Güncelleme:myType
* * * * kenar vaka için bir kontrol eklenir, söz konusu genel arabirimi.
Bunu Paylaş:
Genel tür parametre kovaryans ve birde...
Genel bir parametre olarak yazın mümkü...
Nasıl bir türe özgü genel arabirim uyg...
Oluşturulmuş Bir Sistem Başarılı.Bir Y...
Bir arabirim uygulayan her türlü elde...