Я создаю класс, который заполняет словарь как члена парламента, не занимающего официального поста. Я хочу выставить значения словаря, не выставляя сам словарь (способом только для чтения.) Я могу легко сделать свойство для представления _dictionary.Keys
, но как я могу перегрузиться []
так, чтобы MyClass[key]
возвраты _dictionary[key]
?
Я думаю, что я, возможно, должен реализовать интерфейс, но я не уверен который...
Я почти уверен, что это именно то, что вам нужно:
public TValue this[TKey key] {
get { return _dictionary[key]; }
}
Если вы хотите реализовать интерфейс, чтобы указать клиентскому коду, что к вашему классу можно получить доступ по индексу типа TKey
, Ближайшее совпадение (насколько мне известно) - IDictionary
.
К сожалению, IDictionary
имеет целую группу членов, которые нарушают ваше требование только для чтения, что означает, что вам придется явно реализовать множество членов только для того, чтобы вызвать исключение NotImplementedException.
(или что-то вроде этого), когда они вызываются: а именно, установщик для this
, Add
, Clear
и Remove
.
Может быть, для этой цели больше подходит другой интерфейс (что-то вроде IReadOnlyDictionary
?); Просто я с этим не сталкивался.
Вы также можете написать свой собственный интерфейс, конечно, если вы намереваетесь иметь несколько классов, предлагающих аналогичные функции.
Это называется индексатор. See http://msdn.microsoft.com/en-us/library/2549tw02.aspx