3
我期待在C#LinkedList
类的实现,我无法理解 Add方法如何被隐藏。方法隐藏
LinkedList
implements ICollection
它有一个Add
方法。在LinkedList
类代码Add
方法声明为:
void ICollection<T>.Add(T value);
它怎么可能有它在接口中声明的内部方法?
我期待在C#LinkedList
类的实现,我无法理解 Add方法如何被隐藏。方法隐藏
LinkedList
implements ICollection
它有一个Add
方法。在LinkedList
类代码Add
方法声明为:
void ICollection<T>.Add(T value);
它怎么可能有它在接口中声明的内部方法?
的接口明确实施。
Explicilty实现的接口成员只能通过实现接口的实例来访问,就像这样:
LinkedList list;
((ICollection)list).Add(...)
入住这SO问题和答案的详细信息:implicit vs explicit interface implementation
的另一个很好的例子这在.NET中是Streams。大多数流都实现了IDisposable,但有一个名为“Close”的公共方法,而不是“Dispose”。 – vcsjones 2011-06-14 10:23:04
好了,但是当我有一个接口,并实现该接口,我不能有一个实现接口的私有方法,也没有我可以从实施错过接口的方法的类。 – 2011-06-14 10:24:56
@Jenea:你是不是缺少方法也不是私有的。想想为什么**你实现接口。你这样做是为了证明给定的'class'将遵守某个“契约”。如果一个消费者说'class'将通过实例访问它这是唯一有用的'interface'它实现(如果消费者都能够访问到'class'实例本身,为什么使用'interface'?)。当通过'interface'访问,消费者可以访问由'interface',隐含或明确定义的所有方法。 – InBetween 2011-06-14 10:28:48