2011-06-30 16 views
15

duplicados posibles:
What is the difference between a field and a property in C#
Should I use public properties and private fields or public fields for data?Honestamente, ¿cuál es la diferencia entre la variable pública y el acceso público a la propiedad?

¿Cuál es la diferencia entre:

public string varA; 

y

public string varA { get; set; } 
+0

Se ha respondido antes aquí: [Why Properties Matter] (http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx) – R0MANARMY

Respuesta

16

El acceso público a la propiedad le brinda más flexibilidad en el futuro.

Si desea agregar validación a la configuración del valor, simplemente escriba un setter no predeterminado. Ninguno de tu otro código tendría que ser modificado.

También podría haber razones por las que desea reemplazar el captador predeterminado por el código. Eso puede ser un verdadero dolor con una variable pública.

+0

¿quién escribe el código que depende de si un nombre visible es una variable o una propiedad? Esa es la única razón por la que puedo pensar que esto podría importar; de lo contrario, puedes cambiarlo y volver a compilarlo. –

+1

@moz: ¿Qué pasa si su variable pública estaba en un binario separado? Su aplicación usaría la variable ... cuando la cambia a una propiedad, la variable desaparece y ahora tiene dos funciones generadas. Tendría que recompilar cada uno de los binarios a los que hace referencia. – Rob

+2

@Rob: ¿entonces el beneficio de la propiedad se aplica principalmente a las bibliotecas enviadas como binarios solamente? Para el código interno, ¿no tanto? –

1

La propiedad pública accede a los campos y al código de clase interno a través de los métodos expuestos getter y setter. Un campo público accede directamente al campo.

El uso de propertys ofrece el potencial de proporcionar una capa de abstracción y diseño (capacidad para proteger el acceso del conjunto, de forma privada).

Cuando se especifica una propiedad y no hay un cuerpo presente, el compilador que se utiliza para almacenar el valor crea un campo privado subyacente. Básicamente:

private int item = 0; 
public int Item { 
get { return item; } 
set {item = value; } 
} 

En general, tiendo a usar propiedades para variables públicas expuestas y campos para privados. Podría considerar usar un campo si se accede a ese campo muchas veces y la velocidad es un requisito de diseño crucial.

4

Además de las otras respuestas, también se puede utilizar una propiedad para hacer o incluso fijar sólo el valor de sólo lectura:

public int Item { get; private set; } // read-only outside the class. Can only be set privately. 

también se han topado con situaciones en las que más tarde decido que quiero Proxy un objeto, o agregue AOP, que básicamente requiere propiedades.

Cuestiones relacionadas