【发布时间】:2012-02-10 15:52:38
【问题描述】:
在 .Net Framework 中,List<T> 实现了ICollection<T> 接口。但是,在 Visual Studio 中查看 List 类时,我看不到 IsReadOnly 属性,这应该是在 ICollection<T> 接口中。
一个类怎么可能实现一个接口......但没有真正实现它?
【问题讨论】:
在 .Net Framework 中,List<T> 实现了ICollection<T> 接口。但是,在 Visual Studio 中查看 List 类时,我看不到 IsReadOnly 属性,这应该是在 ICollection<T> 接口中。
一个类怎么可能实现一个接口......但没有真正实现它?
【问题讨论】:
它使用explicit interface implementation。例如:
public interface IFoo
{
void Bar();
}
public Foo : IFoo
{
// Note the lack of public here
void IFoo.Bar() {}
}
【讨论】:
IDisposable。你输入.D,而Dispose 没有出现,你想,好吧,几年后你突然发现你应该是using 那个对象,因为它实际上必须被处置。
IsReadOnly 列在the documentation 的显式接口实现部分下。
【讨论】:
它使用显式接口实现。只有将列表用作特定接口时才能看到实现:
List<int> x = new List<int>();
bool b1 = x.IsReadOnly; // not accessible
ICollection<T> y = x;
bool b2 = y.IsReadOnly; // accessible
【讨论】: