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

Jul*_*ues 1 c# delegates

有以下课程:

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

    public void ChangeMethods() {
        OneMethod = delegate(string s) { };
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器说:

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

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

Jon*_*eet 7

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

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

如果你想要一个可以像这样动态运行的类,你或许应该看一下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)

有点不寻常的要做到这一点,无可否认.