C# 使用字符串初始化委托

C# 使用字符串初始化委托,c#,.net,delegates,C#,.net,Delegates,有没有办法用字符串初始化委托?也就是说,您不知道需要在运行时调用的函数的名称?或者我猜有更好的方法 delegate void TestDelegate(myClass obj); void TestFunction() { TestDelegate td = new TestDelegate(myFuncName); // works TestDelegate td = new TestDelegate("myFuncName"); //

有没有办法用字符串初始化委托?也就是说,您不知道需要在运行时调用的函数的名称?或者我猜有更好的方法

   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");
    }
}

可以通过这种方式创建动态委托

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

我收到一个系统空引用异常?@mHelpMe方法是静态的吗?该函数应该是public的,或者您应该向GetMethod添加
BindingFlags.NonPublic | BindingFlags.Instance
。请尝试此操作,确保您的函数是public的,并使用此
TestDelegate tDel=()=>{this.GetType().GetMethod(“PrintMe”)。调用(this,null);};             调用()