2009-08-21 13 views

Respuesta

40

Es la abreviatura de:

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
} 

El compilador genera la variable miembro. Esto se llama automatic property.

+9

... aunque el nombre del campo es en realidad un nombre "indescriptible" (por ejemplo, '<> __ nombre') que no es válido como identificador de C#. Esto le impide acceder directamente al campo desde su código. El término de la especificación es "propiedad implementada automáticamente", pero la mayoría de las personas lo llaman propiedad automática :) –

+0

@phoog: ¿Seguramente quiso decir 'pedantismo' (o como lo ha señalado Mark - 'pedantería')? : D – stuxnetting

+0

@stuxnetting "pedantryism" era una broma. Sólo digo'. Para el registro y todo. – phoog

10

Es una propiedad de lectura-escritura automática. Es una adición de C# 3.0. Algo como:

public class Car { 
    private string name; 
    public string Name { get { return name; } set { name = value; } } 
} 

excepto que no se puede acceder directamente al campo de respaldo.

3

Es el equivilent de hacer:

private string _Text; 

public string Text 
{ 
    get { return _Text; } 
    set { _Text = value; } 
} 

excepto que no tienen acceso a la variable privada, mientras que dentro de la clase.

+1

Entonces, si desea mantener la variable privada, debe usar el formato "anterior" (como en su ejemplo). – Rado

4

Se llama una propiedad autoejecutada y es new to C# 3.0. Es una sintaxis más limpia cuando su acceso a la propiedad no necesita ningún comportamiento especial o validación. Es similar en función a:

public class Car 
{ 
    private string _name; 
    public string Name 
    { 
    get { return _name; } 
    set {_name = value; } 
    } 
} 

Así se ahorra una buena cantidad de código, pero deja la opción más tarde para modificar la lógica de acceso si el comportamiento o las reglas tienen que cambiar.

1

Auto-Implemented Properties

Resumen: En C# 3.0 y más tarde, las propiedades de auto-aplicado crea propiedad-declaración más concisa cuando se requiere ninguna lógica adicional en los de acceso de propiedad.

25

En términos simples se les conoce como elementos de acceso a la propiedad. Su aplicación se puede explicar de la siguiente manera

1.get {nombre} retorno El bloque de código en el acceso get se ejecuta cuando la propiedad es Leer.

2.set {name = value} El bloque de código en el descriptor de acceso set se ejecuta cuando la propiedad es Asignada a un nuevo valor.

Por ejemplo.(Suponiendo que está usando C#)

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. Ahora cuando se hace referencia a esta propiedad como a continuación

    persona p = new Persona(); // Crear instancias de la clase o la creación de objetos ' p' de la clase 'Persona'

    System.Console.Write(p.Name); //The get accessor is invoked here 
    

El acceso de obtención se invoca a Lea el valor de la propiedad, es decir, el compilador intenta leer el valor de la cadena 'nombre'.

2.Cuando Asignar un valor (usando un argumento) a la propiedad 'Nombre' de la siguiente manera

Person p = new Person(); 
p.Name = "Stack" // the set accessor is invoked here 
Console.Writeline(p.Name) //invokes the get accessor 
Console.ReadKey(); //Holds the output until a key is pressed 

El descriptor de acceso set Asigna el valor 'Pila" a la 'propiedad es decir, nombre 'Pila' se almacena en la cadena 'nombre'

salida de la señal:.

Pila

+6

¿Cuál es la razón para tener un get y un set en primer lugar? ¿Por qué no usar un solo accessor tanto para establecer como para obtener? Esta es la pregunta que nadie parece capaz de responder en términos simples. – JsonStatham

Cuestiones relacionadas