Tür

2010-08-02 38 views
28

kullanarak statik yöntem çağırma Type değişkeninin değerini ve statik yöntemin adını bildiğimi varsayarak, Type statik yöntemini nasıl çağırabilirim? Bir Type t verilen Yani Tür

public class FooClass { 
    public static FooMethod() { 
     //do something 
    } 
} 

public class BarClass { 
    public void BarMethod(Type t) { 
     FooClass.FooMethod()   //works fine 
     if (t is FooClass) { 
      t.FooMethod();   //should call FooClass.FooMethod(); compile error 
     } 
    } 
} 

, objektif Type t taşımaktadır sınıfına FooMethod() aramak. Temel olarak typeof() operatörünü tersine çevirmem gerekiyor. Bunun için yansıma kullanarak anlamı yok gibi size de FooClass.FooMethod diyebilirsiniz yukarıdaki örnekte Tabii

public class BarClass { 
    public void BarMethod(Type t) { 
     FooClass.FooMethod()   //works fine 
     if (t == typeof(FooClass)) { 
      t.GetMethod("FooMethod").Invoke(null, null); //null - means calling static method 
     } 
    } 
} 

:

cevap

39

Sen MethodInfo.Invoke yöntemini çağırmanız gerekir. MethodInfo sınıfa

public class BarClass { 
    public void BarMethod(Type t, string method) { 
     var methodInfo = t.GetMethod(method); 
     if (methodInfo != null) { 
      methodInfo.Invoke(null, null); //null - means calling static method 
     } 
    } 
} 

public class Foo1Class { 
    static public Foo1Method(){} 
} 
public class Foo2Class { 
    static public Foo2Method(){} 
} 

//Usage 
new BarClass().BarMethod(typeof(Foo1Class), "Foo1Method"); 
new BarClass().BarMethod(typeof(Foo2Class), "Foo2Method");  
+0

Teşekkürler Igor, bu işe yaramaz (her ne kadar C# 'de hayal kırıklığına uğramış olsa da - tamamen güvenli değil) Gerçek kodumda, Type değişkeninde olabilecek birçok sınıf var, bu yüzden yansıma gerekli. – MrEff

2

kontrol ve Tip üzerine GetMethod() yöntemleri: Aşağıdaki örnek daha mantıklı.

Farklı durumlar için bir dizi farklı aşırı yükleme var.