2015-05-28 4 views
8

В C# мы имеем следующий интерфейс:Значение "это [Int индекса]"

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable 
{ 
    T this [int index] { get; set; } 
    int IndexOf (T item); 
    void Insert (int index, T item); 
    void RemoveAt (int index); 
} 

Я не понимаю линию

T this [int index] { get; set; } 

Что это значит?

+0

Это означает, что вы получаете дополнительный метод 'get_Item' и' set_Item', который выполняет внутреннюю работу, если вы вызываете 'myList [myInteger] = foo;' или 'T foo = myList [myInteger]' где 'foo' имеет тип 'T'. – atlaste

ответ

9

То есть индексатор, определенная на границе раздела. Это означает, что вы можете get и set значение list[index] для любых IList<T> list и int index.

Документация: Indexers in Interfaces (C# Programming Guide)

Рассмотрим интерфейс IReadOnlyList<T>:

public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, 
    IEnumerable<T>, IEnumerable 
{ 
    int Count { get; } 
    T this[int index] { get; } 
} 

И пример реализации этого интерфейса:

public class Range : IReadOnlyList<int> 
{ 
    public int Start { get; private set; } 
    public int Count { get; private set; } 
    public int this[int index] 
    { 
     get 
     { 
      if (index < 0 || index >= Count) 
      { 
       throw new IndexOutOfBoundsException("index"); 
      } 
      return Start + index; 
     } 
    } 
    public Range(int start, int count) 
    { 
     this.Start = start; 
     this.Count = count; 
    } 
    public IEnumerable<int> GetEnumerator() 
    { 
     return Enumerable.Range(Start, Count); 
    } 
    ... 
} 

Теперь вы могли бы написать такой код:

IReadOnlyList<int> list = new Range(5, 3); 
int value = list[1]; // value = 6 
+0

вы можете рассказать мне сценарий, когда эта кабина полезна –

Смежные вопросы