请看https://msdn.microsoft.com/zh-cn/library/system.collections.dictionarybase(v=vs.110).aspx
这里面的DictionaryBase 类有两个属性的功能一模一样 他们是InnerHashtable和Dictionary 为什么用两个一样的?
这里面的DictionaryBase 类有两个属性的功能一模一样 他们是InnerHashtable和Dictionary 为什么用两个一样的?
解决方案
8
这种问题文档看不清楚,直接看源代码好了。
protected Hashtable InnerHashtable {
get {
if (hashtable == null)
hashtable = new Hashtable();
return hashtable;
}
}
protected Hashtable InnerHashtable {
get {
if (hashtable == null)
hashtable = new Hashtable();
return hashtable;
}
}
protected IDictionary Dictionary {
get { return (IDictionary) this; }
}
http://referencesource.microsoft.com/#mscorlib/system/collections/dictionarybase.cs,2209bf491c2e59b2
InnerHashtable返回的是内置的哈希表,Dictionary返回的是自身作为 IDictionary 的接口(原因是是显式实现,所以用Dictionary可以避免调用者用as再转换)
12
InnerHashtable返回类型Hashtable
Dictionary返回类型IDictionary
哪里一模一样了?
另外你点进去,里面有说明,On*方法只会在Dictionary属性返回的对象上触发
Dictionary返回类型IDictionary
哪里一模一样了?
另外你点进去,里面有说明,On*方法只会在Dictionary属性返回的对象上触发
class MyDict : DictionaryBase { protected override void OnValidate(object key, object value) { if(value == null) Console.WriteLine("警告:值为null"); } } var myDict = new MyDict(); var dictionary = dict.Dictionary; var hashtable = dict.InnerHashtable; dictionary.Add("key", null); //会显示 警告:值为null hashtable.Add("key", null);