列表和集合

时间:2010-08-19 06:14:46

标签: c# inheritance list interface

查看接口 System.Collections.Generic.ICollection ,其定义要求继承成员包含属性 bool IsReadOnly {get; }

然而,我接着看了继承 System.Collections.Generic.ICollection 的类 System.Collections.Generic.List ,这个类不包含定义 bool IsReadOnly {get; } 即可。如何破坏继承链或者我遗漏了什么?

5 个答案:

答案 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; }