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

nr1*_*nr1 19 c# methods

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

A有一个方法"public void Foo()".

B还有其他几种方法.

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

这该怎么做?

Ree*_*sey 53

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

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

class B
{
    public Action TheMethod { get; set; }
}

class A
{
    public static void Foo() { Console.WriteLine("Foo"); }
    public static void Bar() { Console.WriteLine("Bar"); }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以设置:

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...
Run Code Online (Sandbox Code Playgroud)

这将打印出"Foo"然后"Bar".

  • @nr1:实际上有很多选项 - `Action` 将允许您使用不返回值且不带参数的方法。例如,如果您的方法都采用 int 并返回一个字符串,则可以使用 `Func<int,string>`。 (2认同)

Joh*_*hnD 11

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

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

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