2010-05-18 16 views
8

Estoy creando una clase que rellena un diccionario como miembro privado. Quiero exponer los valores del diccionario sin exponer el diccionario mismo (de manera solo lectura). Puedo hacer fácilmente una propiedad para exponer _dictionary.Keys, pero ¿cómo puedo sobrecargar [] para que MyClass[key] devuelva _dictionary[key]?¿Cómo puedo sobrecargar los operadores []?

Creo que puede que tenga que implementar una interfaz, pero no estoy seguro de cuál ...

Respuesta

23

Estoy bastante seguro de que esto es lo que está buscando:

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

Si desea implementar una interfaz para indicar al código del cliente que se puede acceder a su clase mediante un índice de tipo TKey, la coincidencia más cercana (que yo sepa) es IDictionary<TKey, TValue>.

Desafortunadamente, IDictionary<TKey, TValue> tiene un montón de miembros que violan el requisito de sólo lectura, lo que significa que tendría que poner en práctica de manera explícita un montón de miembros solamente para lanzar una NotImplementedException (o algo por el estilo) cuando se les llama: a saber, la setter para this, Add, Clear y Remove.

Quizás haya una interfaz diferente que sería más apropiada para este propósito (algo así como IReadOnlyDictionary<TKey, TValue>?); Simplemente no me he encontrado.

También podría escribir su propia interfaz, por supuesto, si tiene la intención de tener múltiples clases que ofrecen una funcionalidad similar a esta.

+0

¡Gracias! Es difícil buscar '[]'. No necesito ir tan lejos como para escribir mi propia interfaz, pero gracias por ese consejo, también. Solo el código que diste fue todo lo que necesito por ahora. – dlras2

Cuestiones relacionadas