【问题标题】:Dynamically assign method / Method as variable动态分配方法/方法作为变量
【发布时间】:2011-11-14 02:14:43
【问题描述】:

所以我有 2 个名为 A 和 B 的类。

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

B 还有其他几种方法。

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

如何做到这一点?

【问题讨论】:

    标签: c# methods


    【解决方案1】:

    听起来你想在这里使用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”。

    【讨论】:

    • 非常感谢这是有效的。我错过了“行动”关键字:)
    • @nr1:实际上有很多选项 - Action 将允许您使用不返回值且不带参数的方法。例如,如果您的方法都采用 int 并返回字符串,则可以使用 Func<int,string>
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 2013-01-13
      • 2011-09-25
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      相关资源
      最近更新 更多