2010-11-09 2 views
1

В настоящее время я изучаю главу индексаторов, но я не могу понять «this [int pos]» и «this [string data]» следующего кода. Может ли кто-нибудь помочь мне в этом?Help in indexers code

class OvrIndexer 
{ 
    private string[] myData; 
    private int   arrSize; 

    public OvrIndexer(int size) 
    { 
     arrSize = size; 
     myData = new string[size]; 

     for (int i=0; i < size; i++) 
     { 
      myData[i] = "empty"; 
     } 
    } 

    public string this[int pos] 
    { 
     get 
     { 
      return myData[pos]; 
     } 
     set 
     { 
      myData[pos] = value; 
     } 
    } 

    public string this[string data] 
    { 
     get 
     { 
      int count = 0; 

      for (int i=0; i < arrSize; i++) 
      { 
       if (myData[i] == data) 
       { 
        count++; 
       } 
      } 
      return count.ToString(); 
     } 
     set 
     { 
      for (int i=0; i < arrSize; i++) 
      { 
       if (myData[i] == data) 
       { 
        myData[i] = value; 
       } 
      } 
     } 
    } 

ответ

1

Один обращается к индексу с помощью целого числа, а другая строка:

var indexer = new OvrIndexer(); 

// Sets the first item of the indexer to "Value1" 

indexer[0] = "Value1"; 

// Sets the item identified by key "Key2" to value "Value2" 

indexer["Key2"] = "Value2"; 
0

Это просто Определяющее из индексаторов для вашего класса, так что вы можете использовать синтаксис, как это, чтобы получить содержимое внутренний массив класса.

myOvrIndexer[3] 

вернет 4-й элемент массива myData.

myOvrIndexer["Test"] 

возвращает первый элемент с содержанием Test.

Обратите внимание, что этот класс в основном бесполезен, поскольку он просто обертывает массив и не добавляет каких-либо полезных функций, кроме индексатора, получающего строку вместо индекса, но с точки зрения обучения этот класс должен хорошо работать, объясняя, что происходит ,

Основная цель индексаторов, чтобы избежать необходимости создавать методы, и, таким образом, чтобы писать синтаксис вроде этого:

myOvrIndexer.GetElement(3); 
myOvrIndexer.SetElement(3, myValue); 

Я думаю, что мы оба согласны с тем, что этот синтаксис выглядит лучше:

myOvrIndexer[3]; 
myOvrIndexer[3] = myValue; 
0

this[int pos]

Получатель возвращает значение по указанному индексу.

Установитель установит значение в указанном указателе.

тогда

this[string data]

Поглотитель возвращает счетчик появлений в стоимости вы смотрите вверх.

Сеттер заменит все найденные значения с новым значением.