我可以使用其他类的函数作为委托吗?

Mar*_*ier 1 c#

假设我有2个类,A类和B类.A类创建一个B类实例.A类有一个函数,我想从B类传递给一个方法.

class A {
  void Main(string[] args) {
    B classB=new B();

    DelegateCaller(new delFunction(classB.TheFunction());   // <-- Won't compile (method name expected)
    DelegateCaller(new delFunction(B.TheFunction());        // <-- Won't compile (object reference is req'd)
  }

  public delegate string delFunction();

  public DelegateCaller(delFunction func) {
    System.Console.WriteLine(func());
  }
}

class B {
  public string TheFunction() {
    return "I'm Printing!!!";
  }
}
Run Code Online (Sandbox Code Playgroud)

我不确定它是否是语法问题,或者它只是我不能做的事情.也许我需要在B中定义委托,但在A中引用它?什么B的这个指针?

Ani*_*Ani 6

这只是一个语法问题; 摆脱括号后classB.TheFunction- 它们表示你想要调用方法.

DelegateCaller(new delFunction(classB.TheFunction));
Run Code Online (Sandbox Code Playgroud)

请注意,方法组中存在隐式转换,因此您可以执行以下操作:

DelegateCaller(classB.TheFunction);
Run Code Online (Sandbox Code Playgroud)

另请注意,在这种情况下创建自己的委托类型是不必要的; 你可以使用内置Func<string>类型.

编辑:正如Darin Dimitrov指出的那样,调用实例方法也是一个无关的问题,就像它是一个静态方法一样.