具有以下课程:
class C {
public void OneMethod(string s) {
}
public void ChangeMethods() {
OneMethod = delegate(string s) { };
}
}
编译器说:
错误 1 无法分配给“OneMethod”,因为它是“方法组”
这是为什么?我应该创建一个方法组吗?
您根本无法更改类的行为方式。
方法组仅用于方法调用表达式和创建委托实例时。
如果你想要一个可以像这样动态表现的类,你也许应该看看ExpandoObject
. 或者,如果您希望能够让您的OneMethod
班级根据不同的委托做一些事情,您可以使用相关委托类型的字段轻松地将其连接起来:
class C {
private Action<string> action = delegate {};
public void OneMethod(string s) {
action(s);
}
public void ChangeMethods() {
action = delegate(string s) { };
}
}
诚然,想要这样做有点不寻常。