簡體   English   中英

在c#中重載字典的多值構造函數

[英]overloading multivalued constructor for dictionary in c#

我在C#工作,我不太確定如何說出這個問題(這使搜索變得困難)。 基本上我有一個繼承自Dictionary<string,MyButton>的類,其中MyButton是我創建的類。 但是我想覆蓋Add函數以防止添加不符合特定要求的keyvalue對(例如,字典中的所有MyButton值的大小屬性都相同)。 我知道如何使用New運算符覆蓋Add函數但是我不知道如何覆蓋允許執行此操作的Dictionary類的構造函數,例如:

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

(從這里取的例子)

我不確定哪個構造函數允許您執行上述操作。 我相信它是這個構造函數,但我不知道如何覆蓋它,甚至不知道如何制作它。

任何幫助,將不勝感激。

謝謝!

您提供的代碼示例使用對象初始化程序。 這就是所謂的編譯器'sugar',即它是一種縮寫語法,可以擴展為長手等價物。 在這種情況下,它是以下的簡寫:

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

看看KeyedCollection {TKey,TItem}類。 它旨在用作key-vaue集合的基類。 然后,您可以覆蓋受保護的方法InsertItem,RemoveItem,ClearItems和SetItem以添加自定義邏輯。 這些方法由Add,Remove和Clear方法調用。 看看第二個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM