Как преобразовать строку в «сигнатуру функции» для создания делегата? - PullRequest
1 голос
/ 13 марта 2009

Я пытаюсь передать имя метода из одного класса в другой класс, чтобы другой класс мог «подписать» ее на событие, о котором первый класс не знает. Допустим, у меня есть эти классы:

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 Ответ

3 голосов
/ 13 марта 2009

Вы действительно не хотите передавать имя функции - вы хотите передать саму функцию делегата - это ключ к делегатам. Дайте мне минуту, и я напишу код так, как вы хотите.

Вот, пожалуйста,

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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...