2016-10-20 97 views
1

是否有任何方式使用字符串初始化委託?即你不會知道需要在運行時調用的函數的名字嗎?或者我猜這樣做有更好的方法嗎?使用字符串初始化委託使用字符串

delegate void TestDelegate(myClass obj); 

    void TestFunction() 
    { 
     TestDelegate td = new TestDelegate(myFuncName); // works 
     TestDelegate td = new TestDelegate("myFuncName"); // doesn't work 
    } 

更新

是的代碼是我目前有哪些工作不

class Program 
{ 
    static void Main(string[] args) 
    { 
     Bish b = new Bish(); 
     b.MMM(); 

     Console.Read(); 
    } 
} 

class Bish 
{ 
    delegate void TestDelegate(); 
    public void MMM() 
    { 
     TestDelegate tDel = (TestDelegate)this.GetType().GetMethod("PrintMe").CreateDelegate(typeof(TestDelegate)); 
     tDel.Invoke(); 
    } 

    void PrintMe() 
    { 
     Console.WriteLine("blah"); 
    } 
} 

回答

2

您可以創建一個動態的委託這種方式

class Bish 
{ 
    delegate void TestDelegate(); 
    delegate void TestDelegateWithParams(string parm); 

    public void MMM() 
    { 
     TestDelegate tDel =() => { this.GetType().GetMethod("PrintMe").Invoke(this, null); }; 
     tDel.Invoke(); 

     TestDelegateWithParams tDel2 = (param) => { this.GetType().GetMethod("PrintMeWithParams").Invoke(this, new object[] { param }); }; 
     tDel2.Invoke("Test"); 
    } 

    public void PrintMe() 
    { 
     Console.WriteLine("blah"); 
    } 

    public void PrintMeWithParams(string param) 
    { 
     Console.WriteLine(param); 
    } 
} 
+0

我得到一個系統空引用異常? – mHelpMe

+0

@mHelpMe方法是靜態的嗎? – IllidanS4

+0

@ IllidanS4我剛剛在 – mHelpMe