2010-08-02 25 views
28

Come si chiama un metodo statico da un Type, supponendo che conosca il valore della variabile Type e il nome del metodo statico?Chiamare un metodo statico utilizzando un tipo

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 
     } 
    } 
} 

Quindi, dato un Type t, l'obiettivo è di chiamare FooMethod() sulla classe che è di Type t. Fondamentalmente ho bisogno di invertire l'operatore typeof().

risposta

39

è necessario chiamare il metodo MethodInfo.Invoke:

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 
     } 
    } 
} 

Naturalmente nell'esempio di cui sopra si potrebbe anche chiamare FooClass.FooMethod in quanto non v'è alcun punto utilizzando la riflessione per questo. Il seguente esempio ha più senso:

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

Grazie Igor, questo funzionerà benissimo (anche se sono deluso in C# - sembra completamente non tipografico) Nel mio codice attuale ci sono molte classi che potrebbero essere nella variabile Tipo, quindi è necessaria la riflessione. – MrEff

2

Controllare nella classe MethodInfo e le GetMethod() metodi su Tipo.

Esistono diversi sovraccarichi per diverse situazioni.

Problemi correlati