Code Bye

怎么一模一样

请看https://msdn.microsoft.com/zh-cn/library/system.collections.dictionarybase(v=vs.110).aspx
这里面的DictionaryBase 类有两个属性的功能一模一样 他们是InnerHashtable和Dictionary   为什么用两个一样的?
解决方案

8

这种问题文档看不清楚,直接看源代码好了。
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属性返回的对象上触发
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);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么一模一样