2016-07-08 3 views
2

Является ли свойство item в C# всегда используемым как indexer в C#? Позвольте мне объяснить с помощью example. ArrayList имеет много свойств, таких как count, capacity, и один из них - Item.Item. Свойство, отличное от количества и емкости, к которым обращаются, помещая точку после имени ArrayList, не используется ключевыми словами Item, а непосредственно Indexer. , например.Свойство объекта в C#

ArrayList MyList = new ArrayList(); 
MyList.add(100); 
MyList[0] = 200; 

Как указано выше, например, использует ключевое слово Item для определения индексаторов вместо реализации свойства Item.

My Query: Могу ли я сказать всякий раз, когда в C# свойство элемента объясняется, что неявно понимается, что он ссылается на Indexer в терминах?

ответ

4

MyList[0] является указателем, он позволяет вам получить доступ к объекту, как к массиву. Синтаксис определения выглядит так:

public T this[int index] 
{ 
    // reduced for simplicity 
    set { internalArray[index] = value; } 
    get { return internalArray[index]; } 
} 

Компилятор генерирует методы:

public T get_Item(inde index) 
{ 
    return internalArray[index]; 
} 

и

public void set_Item(inde index, T value) 
{ 
    internalArray[index] = value; 
} 

Там нет никакой связи между List.Add(something) и List[0] = something. Первый - это метод, который добавляет значения в конец списка. Второй - синтаксический сахар, который вызывает метод List.set_Item(0, something).

Если синтаксис [] напрямую поддерживается CLR (как есть массив), то он является индексом, определенным внутри класса, который использует синтаксический сахар, как объяснялось выше.

+0

синтаксический сахар? что это значит, может у, пожалуйста, объясните. –

+0

@PranitaJain Простыми словами я вижу синтаксический сахар в качестве ярлыков синтаксиса, предоставляемых компилятором, чтобы облегчить нашу жизнь. Хотя компилятор преобразует это в правильный синтаксис. Например, вы пишете 'array.ToList();' компилятор меняет его на 'Enumerable.ToList (array);' (Это, кстати, методы расширения) – user3185569

+0

. спасибо за подробный ответ. –

2

В соответствии с вышеприведенной документацией указатель определяется следующим образом.

public virtual object this[ 
    int index 
] { get; set; } 

Точнее, там на самом деле нет Item собственности, но индексатор называется как «свойство элемента» в документации.

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