Ich versuche, eine statische Klassenmethode über Reflexion zu rufen und ihren Rückgabewert erhalten wie folgt:eine statische Methode einer Klasse aufrufen Reflexion mit
private SA GetData()
{
Type type = Type.GetType("SA010");
Object obj = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("GetSA");
return (SA)methodInfo.Invoke(obj, null);
}
Hier ist die Klasse und Methode, die ich nennen werde:
public class SA010
{
public static SA GetSA()
{
//do stuff
return SA.
}
}
Das Problem ist, ich erhalte eine Null-Referenz Ausnahme für die Variable 'Typ'. GetData() und SA010.GetSA() befinden sich in demselben Namespace.
Irgendwelche Ideen, warum ich diesen Fehler bekommen könnte, etwas damit zu tun, vielleicht statisch zu sein?
Erstens zu verwenden, warum Sie eine * Instanz erstellen *, wenn Sie zu nennen sind versuchen eine statische Methode? Sie sollten "null" als erstes Argument für "Invoke" übergeben. Das Problem ist jedoch, dass 'Type.GetType()' den Namespace-qualifizierten Namen benötigt. Sie wollen also 'Type.GetType (" My.Namespace.SA10 ")'. Wenn 'SA10' in einer anderen * Assembly * ist (was nicht dasselbe Konzept wie der Namespace ist), müssen Sie dies ebenfalls angeben. –
@stuartd: Kein Problem: "Die Suche umfasst öffentliche statische und öffentliche Instanzmethoden." –
Wenn Sie sowohl den Typ als auch den Methodennamen fest codieren, warum verwenden Sie überhaupt Reflektion? Erhält Ihr realer Code beide dynamisch? Wenn ja, können Sie den Aufrufer so ändern, dass der vollständig qualifizierte Typname übergeben wird? –