2010-08-02 13 views
8

¿Por qué es esto:Propósito de propiedades automáticas en .NET

public string Foo {get;set;} 

considera mejor que esto:

public string Foo; 

no puedo por la vida de mí trabajar hacia fuera. ¿Alguien puede arrojar algo de luz?

Gracias

+1

Como siempre que aparece este tema, lea Jon Skeet's> ** [Why Properties Matter] (http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx) ** –

Respuesta

12

Debido a que puede transparente (desde la perspectiva del código de cliente) cambiar la implementación del colocador/captador wheras no se puede hacer lo mismo, si expone la propiedad subyacente directamente (ya que no sería compatible a nivel binario.)

Sin embargo, hay un cierto olor a código asociado con las propiedades automáticas, ya que hacen que sea más fácil exponer alguna parte del estado de su clase sin pensarlo dos veces. Esto también le ha sucedido a Java, donde en muchos proyectos se encuentran pares de get/setXxx en todo el lugar que exponen el estado interno (a menudo sin necesidad de hacerlo, "por las dudas"), lo que hace que las propiedades sean esencialmente públicas.

+0

Esta es la respuesta - si usted quiere para cambiar la forma en que se calcula o almacena Foo, puedes hacerlo de forma transparente. –

+1

No entiendo por qué no puede cambiar de manera transparente el acceso directo al campo a una propiedad. El código del cliente todavía usaría myObject.Foo = bar o Console.Write (myObject.Foo). Sin cambios en el código del cliente ... – David

+6

@David: ¿Quieres apostar? a) Definitivamente no es compatible con archivos binarios, por lo que * al menos * necesita volver a compilar. b) No es compatible con la fuente en algunas situaciones; por ejemplo, puede usar un campo como argumento para un parámetro de salida, pero no puede usar una propiedad. Luego, hay algo que usa la reflexión (como el enlace de datos). Solo diga no a los campos públicos ... –

1

Mientras que el propósito de un campoes el estado del objeto de almacenamiento , el propósito de una propiedad es meramente acceso. La diferencia puede ser más conceptual que práctica, pero las propiedades automáticas proporcionan una útil sintaxis para declarar ambas.

Cuestiones relacionadas