有以下课程:
class C {
public void OneMethod(string s) {
}
public void ChangeMethods() {
OneMethod = delegate(string s) { };
}
}
Run Code Online (Sandbox Code Playgroud)
编译器说:
错误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) { };
}
}
Run Code Online (Sandbox Code Playgroud)
这有点不寻常的要做到这一点,无可否认.