此
var h = new HashSet<int>();
var r = h.IsReadOnly;
无法编译。我必须做
var r = ((ICollection<int>)h).IsReadOnly;
为什么IsReadOnly没有正常实施?
(我不是要求如何,而是为什么)
答案 0 :(得分:17)
我猜它是因为,当HashSet实现ICollection时,IsReadOnly对HashSet没有意义。实际上,如果您反映它,该属性始终返回false。明确地实现它会从公共接口隐藏此方法。
另一个原因是因为ICollection接口可能由于偶然原因而实现(例如,支持xaml序列化),而不是因为它对于类的主要用途是必要的。因此,明确地实现它可以使混乱远离类的接口。
答案 1 :(得分:5)
基本上有两个理由可以使用显式接口实现(来源:MSDN):
对于HashSet<T>
,后一种情况适用,因为哈希集永远不会是只读的,因此IsReadOnly
将始终返回false
。