2015-11-29 3 views
1

Обычно, если мне нужно свойство Accces класса, чем раньше Написать objectname.properties имени (tempRecord), но How Come Here It произведения без написания objectname.properties именидоступ к свойствам без имени объекта и имени свойства?

Обычно, если мне нужно свойство Accces класса, чем я написать objectname.properties имя (tempRecord), но How Come Here It Работа без названия Написание objectname.properties

class TempRecord 
    { 

private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 
             61.3F, 65.9F, 62.1F, 59.2F, 57.5F }; 
private int vps; 

public float this[int index] 
{ 
    get 
    { 
     return temps[index]; 
    } 

    set 
    { 
     temps[index] = value; 
    } 
} 

public int mava 
{ 
    set 
    { 
     vps = value; 
    } 
    get 
    { 
     return vps + vps; 
    } 

} 
} 

class MainClass 
{ 
static void Main() 
{ 
    TempRecord tempRecord = new TempRecord(); 
    tempRecord.mava = 4; 
    // Usually If I Need Accces Class properties , Than I Used To Write objectname.properties name(tempRecord) , 
    //But How Come Here It Work's Without Writing objectname.properties name 
    tempRecord[3] = 58.3F; // Here Without Writing objectname.properties name 
    tempRecord[5] = 60.1F; // here Without Writing objectname.properties name 
    for (int i = 0; i < 10; i++) 
    { 
     System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]); 
    } 
    System.Console.WriteLine("Press any key to exit."); 
    System.Console.ReadKey(); 

} 
} 
+1

Becuase 'TempRecord' имеет индексированное свойство. См. Https://msdn.microsoft.com/en-us/library/aa288464(v=vs.71).aspx. Работает так же, как вы можете получить доступ к элементам из списка – William

ответ

0

ответ является Indexers (C#)

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

Индексы чаще всего реализуются в типах, основной целью которых является инкапсуляция внутренней коллекции или массива. Например, предположим, что у вас есть класс с именем TempRecord, который представляет температуру в Farenheit, как записано в 10 раз в течение 24-часового периода.

Класс содержит массив с названием «temps» типа float для представления температур и DateTime, который представляет дату, когда были зарегистрированы температуры.

Внедрение индексатора в этом классе позволяет клиентам получить доступ к температурам в случае TempRecord как float temp = tr[4] вместо float temp = tr.temps[4].

public int this[int index] // Indexer declaration 
{ 
    // get and set accessors 
} 
+0

Возможно ли использовать несколько индексировщиков в одном классе –

+0

Не в C#, но не ограничивает тип индекса целым числом. –

+0

Что такое «эта» декларация индексатора –