为什么不能将委托分配给方法组?

时间:2013-02-23 18:09:54

标签: c# delegates

拥有以下课程:

class C {
    public void OneMethod(string s) { 
    }

    public void ChangeMethods() {
        OneMethod = delegate(string s) { };
    }
}

编译器说:

  

错误1无法分配给'OneMethod',因为它是'方法组'

为什么?我应该创建一个方法组吗?

1 个答案:

答案 0 :(得分:6)

你根本无法改变一个类的行为方式。

方法组仅用于方法调用表达式和创建委托实例时。

如果你想要一个可以像这样动态运行的类,你应该看看ExpandoObject。或者,如果您希望能够使OneMethod类基于不同的委托做某事,您可以使用相关委托类型的字段轻松地将其挂起:

class C {
    private Action<string> action = delegate {};

    public void OneMethod(string s) { 
        action(s);
    }

    public void ChangeMethods() {
        action = delegate(string s) { };
    }
}

无可否认地想要这样做有点