拥有以下课程:
class C {
public void OneMethod(string s) {
}
public void ChangeMethods() {
OneMethod = delegate(string s) { };
}
}
编译器说:
错误1无法分配给'OneMethod',因为它是'方法组'
为什么?我应该创建一个方法组吗?
答案 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) { };
}
}
无可否认地想要这样做有点。