2012-04-18 25 views
9

¿Existe alguna forma establecida de devolver una matriz de 2 d de solo lectura en C#?Solo lectura de matriz bidimensional en C#

ReadOnlyCollection es lo correcto para una matriz de 1-d, y me complace escribir mi propia clase contenedora que implementa un this[] {get}. Pero no quiero reinventar la rueda si esta rueda ya existe.

+2

no hay nada integrado en las matrices multidimensionales afaik – BrokenGlass

+0

Aquí hay algunas respuestas de una pregunta similar sobre StackOverflow - http://stackoverflow.com/questions/678379/is-there-a-read-only-generic-dictionary-available -in-net –

+0

Eso no es muy similar, @ Scorpion-Prince. –

Respuesta

1

Solo hay una forma de simular esto.

Necesita crear su propia clase, con una matriz privada.

La implementación más similar de una matriz es un indizador:

El enlace '10 0,8' muestra la simulación de una matriz bidimensional.

Si implementa el indexador solo con un captador, el usuario solo puede leer los elementos, pero no escribirlos. Sin embargo, si cada elemento es un objeto (tipo de referencia), no puede evitar la modificación de las propiedades de los objetos accedidos.

Sin embargo, hay varias maneras de simular objetos "sólo lectura":

  • crear una clase contenedora que expone las propiedades de cada elemento de la matriz como de sólo lectura propiedades, por lo que no pueden ser modificados
  • Uso de los tipos de valor primitivas (como int)
  • derrotar a los cambios, devolviendo una copia del elemento de la matriz privada en lugar del elemento original en la matriz privada, de modo que, los cambios realizados en el objeto no lo hacen afectar el objeto original en la matriz.

En otros lenguajes como C++ hay referencias y punteros a valores constantes, pero esto no existe en C#.

3

Desafortunadamente no hay ninguna implementación incorporada para manejar un caso que usted solicite. Pero una simple implementación por su cuenta, no debería ser algo difícil.

La única pensar, espero que consciente de ello, que va a hacer es una colección de sólo lectura , pero no elementos dentro de esa colección.

Espero que esto ayude.

Cuestiones relacionadas