查看接口 System.Collections.Generic.ICollection ,其定义要求继承成员包含属性 bool IsReadOnly {get; }
然而,我接着看了继承 System.Collections.Generic.ICollection 的类 System.Collections.Generic.List ,这个类不包含定义 bool IsReadOnly {get; } 即可。如何破坏继承链或者我遗漏了什么?
答案 0 :(得分:1)
IsReadOnly
属性 ,但List<T>
正在实施explicitly。
为了说服自己,你可以这样做:
List<T> genericList = new List<T>();
IList explicitIList = genericList;
bool isReadOnly = explicitIList.IsReadOnly;
这应该编译。
您可能还希望查看此question和此article,了解如何显式实现接口,以及如何从类型外部引用类型上显式实现的成员。
答案 1 :(得分:1)
它位于IList部分:
IList实现ICollection
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
{
public List();
public List(int capacity);
public List(IEnumerable<T> collection);
public int Capacity { get; set; }
#region IList Members
int IList.Add(object item);
bool IList.Contains(object item);
void ICollection.CopyTo(Array array, int arrayIndex);
int IList.IndexOf(object item);
void IList.Insert(int index, object item);
void IList.Remove(object item);
bool IList.IsFixedSize { get; }
bool IList.IsReadOnly { get; }
bool ICollection.IsSynchronized { get; }
object ICollection.SyncRoot { get; }
object IList.this[int index] { get; set; }
#endregion
...and so on
}
答案 2 :(得分:1)
答案 3 :(得分:0)
是。它是明确实现的。因此,您应该以这种方式访问其成员(明确地将其转换为接口) ((ICollection的)列表).IsReadOnly;
答案 4 :(得分:0)
从System.Collections.Generic.List的.NET反射器中的反汇编代码,它确实包含IsReadOnly
属性。
bool ICollection<T>.IsReadOnly { get; }