Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串转换为«;函数签名&xBB;创建一个委托?_C#_Delegates - Fatal编程技术网

C# 如何将字符串转换为«;函数签名&xBB;创建一个委托?

C# 如何将字符串转换为«;函数签名&xBB;创建一个委托?,c#,delegates,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 dele

我试图将一个方法的名称从一个类传递到另一个类,这样另一个类就可以“订阅”第一个类不知道的事件。 假设我有这些课程:

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

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

给你:

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

谢谢有了约翰尼斯的回答,我做过类似的事情,但没有这么简单!我现在觉得我几乎无法触及C#的表面!这是一个很大的优点!;-)代表们不仅仅是在c#的表面上摸索,如果你能理解它是如何工作的,你应该祝贺自己。