2010-08-12 74 views
3

我有以下代碼用於避免switch語句來決定調用哪個方法,並且它只與我設置的BindingFlags標誌一起使用,沒有InvokeMethod。什麼是InvokeMethod實際上意味着,爲什麼它沒有在下面的代碼需要:BindingFlags.InvokeMethod的意思是什麼?

public enum PublishMethods 
{ 
    Method1, 
    Method2, 
    Method3 
} 
private void Form1_Load(object sender, EventArgs e) 
{ 
    InvokePublishMethod(PublishMethods.Method2); 
} 
private void InvokePublishMethod(PublishMethods publishMethod) 
{ 
    var publishMethodsType = this.GetType(); 
    var method = publishMethodsType.GetMethod("Publish" + publishMethod, BindingFlags.NonPublic | BindingFlags.Instance); 
    method.Invoke(this, null); 
} 
private void PublishMethod2() 
{ 
    MessageBox.Show("Method2!"); 
} 

回答

4

InvokeMethod不使用GetMethod,但是當你傳遞一個BindingFlagsType.InvokeMember使用它。

BindingFlags是一種奇怪的枚舉,它結合了三個獨立的功能(根據MSDN,'可訪問性','綁定參數'和'操作')。無論何處需要參數BindingFlags,這三個功能都沒有意義。

+0

啊,所以我不需要'GetMethod'來調用它,只需'InvokeMethod'。太好了!然而,在這種情況下,我更喜歡'GetMethod',所以如果方法不存在,我可以構造一個錯誤消息。 – ProfK 2010-08-12 18:31:12

2

MSDNInvokeMethod構件:

指定的方法將被調用。這不能是構造函數或類型初始值設定項。

它被InvokeMember方法使用。