2

具有以下课程:

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

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

编译器说:

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

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

4

1 回答 1

8

您根本无法更改类的行为方式。

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

如果你想要一个可以像这样动态表现的类,你也许应该看看ExpandoObject. 或者,如果您希望能够让您的OneMethod班级根据不同的委托做一些事情,您可以使用相关委托类型的字段轻松地将其连接起来:

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

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

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

诚然,想要这样做有点不寻常。

于 2013-02-23T18:13:54.377 回答