Как я могу перегрузиться [] операторы?

Я создаю класс, который заполняет словарь как члена парламента, не занимающего официального поста. Я хочу выставить значения словаря, не выставляя сам словарь (способом только для чтения.) Я могу легко сделать свойство для представления _dictionary.Keys, но как я могу перегрузиться [] так, чтобы MyClass[key] возвраты _dictionary[key]?

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

8
задан dlras2 18 May 2010 в 16:12
поделиться

2 ответа

Я почти уверен, что это именно то, что вам нужно:

public TValue this[TKey key] {
    get { return _dictionary[key]; }
}

Если вы хотите реализовать интерфейс, чтобы указать клиентскому коду, что к вашему классу можно получить доступ по индексу типа TKey , Ближайшее совпадение (насколько мне известно) - IDictionary .

К сожалению, IDictionary имеет целую группу членов, которые нарушают ваше требование только для чтения, что означает, что вам придется явно реализовать множество членов только для того, чтобы вызвать исключение NotImplementedException. (или что-то вроде этого), когда они вызываются: а именно, установщик для this , Add , Clear и Remove .

Может быть, для этой цели больше подходит другой интерфейс (что-то вроде IReadOnlyDictionary ?); Просто я с этим не сталкивался.

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

23
ответ дан 5 December 2019 в 06:09
поделиться

Это называется индексатор. See http://msdn.microsoft.com/en-us/library/2549tw02.aspx

4
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: