0

私は C# で作業していますが、この質問の言い方がよくわかりません (検索が困難でした)。Dictionary<string,MyButton>基本的に、私が作成したクラスである から継承するクラスMyButtonがあります。ただし、 Add 関数を上書きして、特定の要件を満たさないキーと値のペアを追加しないようにしたいと考えています (たとえば、ディクショナリ内のすべての MyButton 値には、すべて同じサイズのプロパティがあります)。Add 関数を演算子で上書きする方法は知っていますが、Newこれを可能にする Dictionary クラスのコンストラクターを上書きする方法がわかりません。たとえば、次のようになります。

    Dictionary<string, int> d = new Dictionary<string, int>()
    {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };

(ここからの例)

どのコンストラクターで上記を実行できるかわかりません。このコンストラクターだと思いますが、オーバーライドする方法や作成する方法さえわかりません。

どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

2

あなたが提供したコード例は、オブジェクト初期化子を使用しています。これは、コンパイラの「シュガー」と呼ばれるものです。つまり、これは、同等の長い形式に展開される省略形式の構文です。この場合、次の省略形です。

Dictionary<string, int> d = new Dictionary<string, int>();
d.Add("cat", 2);
d.Add("dog", 10);
d.Add("llama", 0);
d.Add("iguana", -1);

したがって、この場合に使用されているのは、辞書の引数なしのコンストラクターです。

また、newキーワードを使用すると、スーパークラス メソッドがオーバーライドされるのではなく非表示になります。私はそれをお勧めしません。この関連する質問を参照してください。

Dictionary.Add をオーバーライドする

于 2012-12-05T06:39:26.923 に答える
0

KeyedCollection{TKey, TItem}クラスを見てください。これは、キー値コレクションの基本クラスとして使用するためのものです。次に、保護されたメソッド InsertItem、RemoveItem、ClearItems、および SetItem をオーバーライドして、カスタム ロジックを追加できます。これらのメソッドは、Add、Remove、および Clear メソッドによって呼び出されます。2 番目の例を見てください。

于 2012-12-05T10:32:34.683 に答える