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

时间:2011-09-09 20:34:49

标签: c# methods

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

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

B还有其他几种方法。

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

怎么做?

2 个答案:

答案 0 :(得分:53)

听起来你想在这里使用delegate

基本上,您可以在“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”。

答案 1 :(得分:11)

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

Action<T>(一个arg),Action<T1, T2>(两个args)等通用版本...... 此外,如果您的方法具有返回类型,请查看Func<T, TResult>

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