2011-08-11 34 views
6

Tengo una clase que tiene una propiedad de matriz entera y estoy tratando de encontrar la sintaxis correcta para ella. La matriz int se crea una instancia en el constructor de clases.Sintaxis de propiedad de matriz en C#

class DemoClass 
{ 
    private int[] myNumbers; 
    public int[] MyNumbers 
    { 
     get { /* Some logic */ } 
     set { /* Some logic */ } 
    } 

    public DemoClass(int elements) 
    { 
     // Here, the array should get instantiated using the elements. 
    } 
} 

¿Alguien me puede mostrar el código correcto para que funcione?

+0

sintaxis correcta para qué? ¿El getter? ¿El colocador? La inicialización? – BoltClock

+0

Cuando inicializo el campo, ¿tengo que inicializar la propiedad también? ¿Cómo funciona el get/set? – Gasoline

+0

¿Está intentando crear una propiedad [indexer] (http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx) por casualidad? – Serguei

Respuesta

16

¿Usted está buscando:

class DemoClass 
{ 
    public int[] MyNumbers { get; private set; } 

    public DemoClass(int elements) 
    { 
     MyNumbers = new int[elements]; 
    } 
} 

En cuanto a las propiedades normales que no hacen más que dar a conocer un campo privado (como parece querer):

private int[] myNumbers; 
public int[] MyNumbers 
{ 
    get { return myNumbers; } 
    set { myNumbers = value; } 
} 
+2

Me gustaría saber cómo funciona cuando no estoy usando propiedades automáticas y tengo un campo para almacenar la matriz. – Gasoline

+0

¿Lo dijiste en serio? – Blindy

+0

Las matrices son solo un tipo de referencia en C# por lo que puedes convertir 'int []' a System.Array' por ejemplo. Sin propiedades automáticas, simplemente hace 'int [] nums; public int [] Nums {get {return nums;} set {nums = value}} '. Tenga en cuenta que si desea obtener/establecer elementos individuales de la matriz que necesita para hacer una [propiedad del indexador] (http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx). – Serguei

0

Si el número de elementos de la array es fijo, solo proporcionaría un getter para el array y dejaría el setter. Usted todavía será capaz de asignar valores a los elementos individuales de la matriz, pero esto va a evitar que alguien intercambio de toda la gama de debajo de ti (o ajustarlo a null El código sería el siguiente:.

class DemoClass 
{ 
    public int[] MyNumbers 
    { get; private set; } 

    public DemoClass(int elements) 
    { 
     MyNumbers = new int[elements]; 
    } 
} 

Si el número de elementos que no son fijos, entonces usted debe utilizar un List<int> en lugar de una matriz, y luego definitivamente querer una propiedad sin colocador.

0
class DemoClass 
    { 
     private int[] myNumbers; 
     public int[] MyNumbers 
     { 
      get { return myNumbers; } 
      set { myNumbers = value; } 
     } 

     public DemoClass(int[] elements) 
     { 
      myNumbers = elements; 
      // Here, the array should get instantiated using the elements. 
     } 
    } 
-1
class DemoClass 
{ 
    private int[] myNumbers; 
    public int[] MyNumbers 
    { 
     get { return myNumbers; } 
     set { myNumbers = value;} 
    } 

    public DemoClass(int elements) 
    { 
     // Here, the array should get instantiated using the elements. 
     MyNumbers = new int[5] { 1, 2, 3, 4, 5}; 
    } 
} 
10

CA1819: Propiedades no volviesen matrices

http://msdn.microsoft.com/en-us/library/0fss9skc.aspx

matrices devueltas por propiedades no están protegidos contra escritura, incluso si la propiedad es de sólo lectura. Para mantener la matriz a prueba de manipulaciones, la propiedad debe devolver una copia de la matriz. Por lo general, los usuarios no comprenderán las implicaciones de rendimiento adversas de llamar a dicha propiedad. Específicamente, pueden usar la propiedad como una propiedad indexada.

Para el montaje de una violación de esta regla, ya sea que la propiedad de un método o cambie la propiedad para devolver una colección lugar de una matriz