rip*_*234 12 c# interface hashset explicit-interface icollection
这个
var h = new HashSet<int>();
var r = h.IsReadOnly;
Run Code Online (Sandbox Code Playgroud)
不编译.我要做
var r = ((ICollection<int>)h).IsReadOnly;
Run Code Online (Sandbox Code Playgroud)
为什么IsReadOnly没有正常实施?
(我不是问怎么样,但为什么)
小智 17
我猜它是因为,当HashSet实现ICollection时,IsReadOnly对HashSet没有意义.实际上,如果您反映它,该属性始终返回false.明确地实现它会从公共接口隐藏此方法.
另一个原因是因为ICollection接口可能由于偶然原因(例如,支持xaml序列化)而实现,而不是因为它对于类的主要用途是必要的.因此,明确地实现它可以将杂乱的东西排除在类的接口之外.