2015-05-28 10 views
8

In C# abbiamo la seguente interfaccia:significato di "questo [int index]"

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); 
} 

Non capisco la linea

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

Che cosa significa?

+0

Significa che si ottiene un metodo aggiuntivo 'get_Item' e' set_Item' che esegue il funzionamento interno se si chiama 'myList [myInteger] = foo;' o 'T foo = myList [myInteger]' dove 'foo' è di tipo 'T'. – atlaste

risposta

9

Questo è un indicizzatore definito sull'interfaccia. Significa che puoi get e set il valore di list[index] per qualsiasi IList<T> list e int index.

Documentazione: Indexers in Interfaces (C# Programming Guide)

consideri l'interfaccia IReadOnlyList<T>:

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

E un esempio di implementazione di tale interfaccia:

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); 
    } 
    ... 
} 

Ora si potrebbe scrivere codice come questo:

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

puoi dirmi lo scenario quando questa cabina è utile –

Problemi correlati