动态地将方法/方法指定为变量
所以我有两个名为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”。