如何将字符串转换为«函数签名»来创建委托?

时间:2009-03-13 03:28:16

标签: c# delegates

我正在尝试将方法的名称从一个类传递到另一个类,因此另一个类可以将她“订阅”给第一个类不知道的事件。 假设我有这些课程:

class1
{
  public void method1(string msg)
  {
    //does something with msg
  }

  public void i_make_a_class2()
  {
    class2 bob = new class2(method1);
  }
}

class2
{
  delegate void deleg(string msg);
  deleg deleg1;

  public class2(string fct)
  {
    // What I'm trying to do would go there with "fct" converted to function signature
    deleg1 = new deleg(fct);
    // Rest of the class constructor...
  }
  private void method2()
  {
    deleg1(im_a_String);
  }
}

1 个答案:

答案 0 :(得分:3)

你真的不想传递函数的名称 - 你想传递委托函数本身 - 这是委托的关键。给我一点时间,我会按照你想要的方式编写代码。

你走了:

public delegate void deleg(string msg);

public class class1
{
  public void method1(string msg)
  {
    //does something with msg
  }

  public void i_make_a_class2()
  {
    class2 bob = new class2(method1);
  }
}

public class class2
{
  deleg deleg1;
  string im_a_String = "Test";

  public class2(deleg fct)
  {
    deleg1 = fct;
    // Rest of the class constructor...
  }
  private void method2()
  {
    deleg1(im_a_String);
  }
}