2010-03-22 24 views

cevap

16

MethodBase bir özellik ReturnType sahiptir MethodInfo bir temel sınıf olarak kullanılır.

denemek ve MethodInfo örneğine döküm ve o özelliğini kontrol edebilir. Normal yöntemlerinin yanı sıra aynı zamanda bir dönüş türü gibi kurucular gibi yöntemler, temsil etmek için kullanılır, çünkü

+0

Ne MemberInfo onu bulmak istiyorsanız. Dize türünü döndüren/döndüren yöntemler ve alanlar gibi tüm üyeleri filtrelemek istediğimiz bu senaryoyu varsayın. MemberInfo'nun bunu belirtecek bir özelliği var mı? –

21

MethodBase kendisi dönüş türü değildir. Bunun yerine bunu MethodInfo örneğidir olmadığını görmek ve ReturnType özellik için kontrol etmek gerekir.

CompileTimeValidate(MethodBase method) { 
    var normalMethod = method as MethodInfo; 
    if(normalMethod != null) { 
    ValidateReturnType(normalMethod.ReturnType); 
    } 
} 
1

Böyle bir şey deneyin. MethodInfo özelliğine sahiptir ancak MethodBase yanı markalar için kullanılır ve bunlar bir dönüş türü yok.

MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo) 
    MessageBox.Show((b as MethodInfo).ReturnType.Name); 
+2

Küçük nokta ... Zaten b MethodInfo' ardından doğrudan atıldı 'atmaktaysanız' (MethodInfo) b' MethodInfo' olarak b 'biraz tercih edilir. –

+0

Nasıl olur? :) ... –

+2

Takip ettiğim kılavuz: "Sıfır" alırken (uyumsuz bir tür için), kodunuz için kabul edilebilir. Bu durumda, eğer bir null eğer * içinde * kabul edilemezse, '(MethodInfo) b' yerine kullanın. Daha da iyisi, “is” yerine “as” kullanarak ve “null” a karşı test yaparak “cast” işlemini iki kez yapmanın maliyetinden kaçının. – Bevan

İlgili konular