2011-08-28 30 views
9

我一直在試圖通過名稱調用方法,但問題是我調用的方法不能是靜態的,它需要是當前類。通過名稱調用非靜態方法

我試着做這樣的方式:

public static void InvokeMenuMethod(string methodName, object sender, EventArgs e) 
    Type calledType = Type.GetType("MyNamespace.MyClass"); 
    calledType.InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, 
    null, 
    null, 
    new object[] { sender, e } 
); 
} 

這顯然只是所以我想是這樣的

public static void InvokeMenuMethod(string methodName, object sender, EventArgs e) 
    Type calledType = Type.GetType("this"); 
    calledType.InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod | BindingFlags.Public, 
    null, 
    null, 
    new object[] { sender, e } 
); 
} 

,但我得到Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty). Parameter name: bindingFlags錯誤適用於靜態成員.. 。

那麼我該怎麼做呢?

編輯:

所以:

public void InvokeMenuMethod(string methodName, object sender, EventArgs e) { 
    Type.GetType("this").InvokeMember(
     methodName, 
     BindingFlags.InvokeMethod, 
     null, 
     this, 
     new object[] { sender, e } 
    ); 
} 

給人以NullReferenceException

解決方案: 無 「本」 在Type.GetType("this")

+0

有無你嘗試過'BindingFlags.Instance'? – Steven

+0

請看我改變的代碼 - GetType(「this」)給你的例外,因爲它是錯誤的... – Yahia

回答

11

嘗試

this.GetType().InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod, 
    null, 
    this, 
    new object[] { sender, e } 
); 

MSDN

如果單獨指定的InvokeMethod,BindingFlags.Public, BindingFlags.Instance和BindingFlags.Static是自動 包括

+0

我得到一個NullReferenceException ... –

+0

我犯了一個錯誤 - 請參閱更改後的代碼... – Yahia

+0

這就是'BindingFlags.Default'。一旦你指定了任何'BindingFlags',你就失去了默認值。 – SLaks

0

您可以添加BingingFlags.Instance

+0

你的意思是'BindingFlags.Instance'? –

+0

這就是他的意思,但它並不需要... – Yahia

相關問題