动态地将方法/方法指定为变量

所以我有两个名为A和B的课程。

A有一个方法“public void Foo()”。

B还有其他几种方法。

我需要的是B类中的一个变量,它将被赋予A类的Foo()方法。此变量之后应该被“执行”(=>所以它应该执行A类的指定方法)。

这该怎么做?

里德给了你正确的答案。 值得指出的是,除了Action之外,您还可以使用其他委托签名。

有一些通用版本,如Action (一个arg), Action (两个args)等…另外如果你的方法有一个返回类型,请查看Func

  • 行动文档: http : //msdn.microsoft.com/en-us/library/018hxwa8.aspx
  • Func docs: http : //msdn.microsoft.com/en-us/library/bb549151.aspx

或者您当然可以定义自己的委托类型。

听起来你想在这里使用代表 。

基本上,您可以在“B”类中添加:

 class B { public Action TheMethod { get; set; } } class A { public static void Foo() { Console.WriteLine("Foo"); } public static void Bar() { Console.WriteLine("Bar"); } } 

然后你可以设置:

 B b = new B(); b.TheMethod = A.Foo; // Assign the delegate b.TheMethod(); // Invoke the delegate... b.TheMethod = A.Bar; b.TheMethod(); // Invoke the delegate... 

这将打印出“Foo”然后“Bar”。