Списки и ICollections - PullRequest
       16

Списки и ICollections

0 голосов
/ 19 августа 2010

Просмотр интерфейса System.Collections.Generic.ICollection его определение требует, чтобы наследующий элемент содержал свойство bool IsReadOnly {get; } .

Однако затем я взглянул на класс System.Collections.Generic.List , который наследует System.Collections.Generic.ICollection , и этот класс не содержит определения bool IsReadOnly {get; } . Как нарушена цепочка наследования или я что-то упустил?

Ответы [ 5 ]

1 голос
/ 19 августа 2010

Он находится в разделе 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

}
1 голос
/ 19 августа 2010

Член реализован явно:

http://msdn.microsoft.com/en-us/library/bb346454.aspx

1 голос
/ 19 августа 2010

Свойство IsReadOnly есть , но List<T> явно его реализует .

Чтобы убедить себя в этом, вы можете сделать:

List<T> genericList = new List<T>();
IList explicitIList = genericList;

bool isReadOnly = explicitIList.IsReadOnly;

Это должно скомпилироваться.

Возможно, вы также захотите взглянуть на этот вопрос и статью о том, как явно реализовать интерфейсы и как ссылаться на явно реализованный член в типе вне типа. .

0 голосов
/ 19 августа 2010

Из кода дизассемблирования в отражателе .NET System.Collections.Generic.List он содержит свойство IsReadOnly.

 bool ICollection<T>.IsReadOnly { get; }
0 голосов
/ 19 августа 2010

Да. Это реализовано явно. Таким образом, вы должны получить доступ к его членам таким образом (явно приведя его к интерфейсу) ((ICollection) список) .IsReadOnly;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...