2009-03-26 15 views
32

Así que aquí hay un poco de sintaxis que nunca he visto antes, ¿alguien me puede decir lo que esto significa? No estoy seguro si esto se supone que es una abreviatura de una declaración de propiedad abstracta o algo o qué.C# Taquigrafía Propiedad Pregunta

public Class1 myVar { get; set; } 

Por lo que vale, Class1 es una clase abstracta.

Respuesta

82

En C# 3.0 y posterior, auto-implemented properties hacen que la declaración de propiedad sea más concisa cuando no se requiere una lógica adicional en los descriptores de acceso de la propiedad. También permiten que el código del cliente cree objetos Cuando declara una propiedad como se muestra en el siguiente ejemplo, el compilador crea un campo de respaldo privado y anónimo al que solo se puede acceder a través de los accesadores get y set de la propiedad.

// Auto-Impl Properties for trivial get and set 
    public double TotalPurchases { get; set; } 
    public string Name { get; set; } 
    public int CustomerID { get; set; } 
+1

Te votaré por tener una explicación más completa, pero estoy listo para el día. – TheTXI

0

Selectores y ajustadores automáticos.

7

Se llama propiedad automática o auto-implemented, y no es abstracta. Puede usar esa propiedad tal como es. El compilador creará una tienda de respaldo detrás de escena.

Es muy parecido a usar un campo en lugar de una propiedad, pero se obtiene la semántica de la propiedad y se puede usar para cosas como enlaces de datos que requieren propiedades.

+0

Y luego puede cambiar a una implementación explícita sin cambiar su interfaz a las personas que llaman. –

27

Esta es la sintaxis para permitir que el compilador cree un campo (oculto) para usted.

también es muy útil:

public Class1 myVar{ get; private set; } 
+0

'protected' también funciona. Al igual que 'privado '. Estoy bastante seguro de que puedes establecer accesibilidad para 'get' también, pero nunca lo intenté. –

+1

+1 esto es exactamente lo que estaba buscando. Quería que se incluyera algo en forma abreviada para que la operación 'set' solo pueda ser realizada por las funciones miembro de la clase. Gracias :-) – shashwat

7

Es la abreviatura de una propiedad que no hace más que almacenar el valor en un campo. Por lo que sería equivalente a:

private Class1 _myVar; 

public Class1 myVar 
{ 
    get{ return _myVar; } 
    set{ _myVar = value;} 
} 

Es sólo una simple propiedad de que el ejercicio precedente, podría reemplazar con un evantuation más compleja en un momento posterior sin cambiar la interfaz.

2

Se trata de propiedades implementadas automáticamente. Te permiten hacer que tu código sea más conciso. Puede leer más sobre ellos aquí:

Auto-Implement

También puede hacer que los descriptores de acceso tienen diferentes niveles de acceso:

public int MiVar {get; conjunto privado; }

Esto le permite exponer la propiedad externa a la clase y aún así configurarla internamente.

22

Puede parecer una propiedad abstracta o una propiedad de una interfaz, pero está lejos de estarlo. Con el fin de alentar a los desarrolladores a usar propiedades (ya que son una mejor práctica por muchas razones) Microsoft decidió incluir esta característica en C# 3 para permitirte declarar las propiedades con mayor facilidad.

Aquí es la manera estándar de crear una propiedad:

String foo; 

public String Foo 
{ 
    get { return this.foo } 
    set { this.foo = value; } 
} 

Ahora bien, esto requiere un poco de escribir y ya que los desarrolladores son perezosos para el núcleo veces tenemos la tentación de crear campos públicos sólo para ahorrar algo de tiempo .

Ahora, con el compilador de C# 3 podemos hacer esto:

public String Foo { get; set; } 

Si bien esto parece un poco extraño, tenga en cuenta el trabajo que el compilador está haciendo en su nombre. El código anterior se compila a esto:

[CompilerGenerated]  
private string <Foo>k__BackingField; 

public string Foo 
{ 
    [CompilerGenerated] 
    get 
    { 
     return this.<Foo>k__BackingField; 
    } 
    [CompilerGenerated] 
    set 
    { 
     this.<Foo>k__BackingField = value; 
    } 
} 

Así que, aunque la sintaxis es un poco extraño que se sigue creando una propiedad exactamente la forma en que está acostumbrado.