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 に答える