【发布时间】:2013-01-11 14:30:33
【问题描述】:
我将举一个来自 .NET 的示例。
ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IDictionary
在这里你可以看到 ConcurrentDictionary 实现字典接口。但是我无法从 ConcurrentDictionary 实例访问 Add<TKey,TValue> 方法。这怎么可能?
IDictionary<int, int> dictionary = new ConcurrentDictionary<int, int>();
dictionary.Add(3, 3); //no errors
ConcurrentDictionary<int, int> concurrentDictionary = new ConcurrentDictionary<int, int>();
concurrentDictionary.Add(3, 3); //Cannot access private method here
更新:
我知道如何访问它,但我不知道显式实现接口可以允许将访问修饰符更改为内部。它仍然不允许将其设为私有。它是否正确?关于该部分的更详细的解释会有所帮助。另外我想知道一些有效的用例。
【问题讨论】:
-
显式接口实现不会更改访问修饰符。它们改变了如何您可以访问以这种方式实现的成员(即要求您使用接口类型的变量)。
-
查看stackoverflow.com/questions/6129857/…了解一些cmets的使用情况
-
类中的默认可见性级别是
private,与java中的package相反。显式接口实现是私有的,所以不,您的假设不正确。