繁体   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