2011-06-14 108 views
3

我期待在C#LinkedList类的实现,我无法理解 Add方法如何被隐藏。方法隐藏

LinkedList implements ICollection它有一个Add方法。在LinkedList类代码Add方法声明为:

void ICollection<T>.Add(T value); 

它怎么可能有它在接口中声明的内部方法?

回答

6

的接口明确实施。

Explicilty实现的接口成员只能通过实现接口的实例来访问,就像这样:

LinkedList list; 
((ICollection)list).Add(...) 

入住这SO问题和答案的详细信息:implicit vs explicit interface implementation

+0

的另一个很好的例子这在.NET中是Streams。大多数流都实现了IDisposable,但有一个名为“Close”的公共方法,而不是“Dispose”。 – vcsjones 2011-06-14 10:23:04

+0

好了,但是当我有一个接口,并实现该接口,我不能有一个实现接口的私有方法,也没有我可以从实施错过接口的方法的类。 – 2011-06-14 10:24:56

+0

@Jenea:你是不是缺少方法也不是私有的。想想为什么**你实现接口。你这样做是为了证明给定的'class'将遵守某个“契约”。如果一个消费者说'class'将通过实例访问它这是唯一有用的'interface'它实现(如果消费者都能够访问到'class'实例本身,为什么使用'interface'?)。当通过'interface'访问,消费者可以访问由'interface',隐含或明确定义的所有方法。 – InBetween 2011-06-14 10:28:48