2011-02-07 804 views
15

posibles duplicados:
Why use getters and setters?
C# 3.0 Auto-Properties - useful or not?C# captadores, emisores de declaración

¿Hay una diferencia entre la definición de propiedades de la siguiente manera -

// private, with getter & setter 
private string fName; 
public string Name 
{ 
    get { return this.fName } 
    set { this.fName = value } 
} 

// define as a Property 
public string Name { get; set;} 

Por lo Puedo decir, solo loo ks como una preferencia estilística. ¿Me estoy perdiendo de algo?

+0

Efectivamente, no, y esta pregunta se ha hecho muchas veces antes. – ChrisF

+0

@ChrisF definitivamente es una tontería, pero no creo que el que obtuviste sea el duplicado correcto –

+0

@Daniel - fue el primero que encontré, y como el sistema permite múltiples duplicados posibles, no es realmente un problema. – ChrisF

Respuesta

26

Diferencias:

  • El segundo formulario sólo compilará con un C# 3 compilador o temprano
  • La segunda forma no deja ningún código (incluso en la misma clase) de acceso el campo directamente, ya que el campo real tiene un "nombre indecible"

La segunda versión es lo que se conoce como automáticamente i propiedad ampliada (o "propiedad automática" para abreviar). Se introdujeron en C# 3. Si solo está escribiendo código que se parece a la primera versión, es decir, no hay lógica involucrada, entonces las propiedades automáticas son geniales. Siempre puede agregar lógica más tarde convirtiéndola en la primera forma. Todo su código será compatible con ese cambio, en términos de compatibilidad binaria y fuente.

Tenga en cuenta que las propiedades automáticas No le permiten especificar los valores por defecto, y no hay tal cosa como una propiedad realmente sólo lectura automática (es decir, uno sin un captador). Lo más cerca que puede venir es un comprador público con un setter privado, p.

public string Name { get; private set; } 

No es exactamente lo mismo, pero está lo suficientemente cerca en muchas situaciones.

+3

O "auto-propiedad" para más corto;) –

0

En última instancia, funciona igual en este caso. La diferencia se produce cuando desea aplicar las reglas a la configuración get /, en cuyo caso debe usar la variable privada/protegida y ocultarla detrás de una propiedad pública.

2

La primera es una propiedad estándar. Debe definir un campo para almacenar el valor. El segundo es un auto-implemented property, solo disponible en C# 3.0 y posterior.

0

No. En realidad, cuando utiliza la versión más corta (public string Name { get; set; }) el compilador genera automáticamente un campo privado para la propiedad.