[英]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
关键字会隐藏超类方法而不是覆盖它。 我不推荐它。 看到这个相关的问题:
看看KeyedCollection {TKey,TItem}类。 它旨在用作key-vaue集合的基类。 然后,您可以覆盖受保护的方法InsertItem,RemoveItem,ClearItems和SetItem以添加自定义逻辑。 这些方法由Add,Remove和Clear方法调用。 看看第二个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.