2015-05-28 34 views
8

Trong C# chúng ta có giao diện sau:Ý nghĩa của "này [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); 
} 

Tôi không hiểu dòng

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

có nghĩa là gì?

+0

Nó có nghĩa là bạn có thêm một phương thức 'get_Item' và' set_Item' để thực hiện các hoạt động bên trong nếu bạn gọi 'myList [myInteger] = foo;' hoặc 'T foo = myList [myInteger]' trong đó 'foo' thuộc loại 'T'. – atlaste

Trả lời

9

Đó là trình chỉ mục được xác định trên giao diện. Điều này có nghĩa là bạn có thể getset giá trị của list[index] cho bất kỳ IList<T> listint index.

Tài liệu: Indexers in Interfaces (C# Programming Guide)

Xem xét giao diện IReadOnlyList<T>:

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

Và một thực hiện ví dụ về giao diện mà:

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

Bây giờ bạn có thể viết code như thế này:

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

bạn có thể cho tôi biết tình huống khi chiếc taxi này hữu ích –