see remarks para method example cref comment c# properties accessor

remarks - propiedades en C#



remarks c# (4)

¿Cómo son estos dos diferentes?

Hay diferentes al menos por 2 puntos:

  1. En la propiedad normal, debe definir un campo antes ( someInt en su caso)
  2. En la propiedad normal, puede establecer un punto de interrupción en los modificadores set/get , en lugar de la propiedad automática no puede hacer eso.

En otras palabras: si necesita "solo propiedad", use auto-propiedades, si necesita más control sobre el flujo de trabajo (genere un evento en el set , depure, ejecute otras cosas en el interior), use las propiedades "normales".

¿Por qué somos capaces de escribir?

public int RetInt { get;set; }

en lugar de

public int RetInt { get{return someInt;}set{someInt=value;} }

¿Cuál es la diferencia entre los dos?


En realidad, estos no son realmente diferentes, en ambos casos tiene un campo privado que corresponde a su propiedad, pero en el primer caso es generado por el compilador y oculto.

Si necesita usar la variable detrás de la propiedad con bastante frecuencia en su clase, creo que es mejor declarar su propiedad a la manera antigua (la segunda), porque cada vez que acceda a ella, llamará al captador si lo hace " nueva manera.

Si solo lo necesita para usarlo fuera de su clase (o en la mayoría de los casos), entonces puede optar por la "nueva" forma (primera)


Esta característica se denomina propiedades implementadas automáticamente y se presenta con C # 3.0

En C # 3.0 y versiones posteriores, las propiedades implementadas automáticamente hacen que la declaración de propiedad sea más concisa cuando no se requiere una lógica adicional en los accesores de propiedad. También permiten el código del cliente para crear 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 mediante los accesos get y set de la propiedad .

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

Para tu pregunta

¿Cuál es la diferencia entre los dos?

En tu caso, ninguno. Dado que no está haciendo nada mientras configura o recupera el valor, pero suponga que desea realizar una validación o desea realizar otro tipo de verificación, entonces:

private int someInt; public int RetInt { get { if (someInt > 0) return someInt; else return -1; } set { someInt = value; } // same kind of check /validation can be done here }

Lo anterior no se puede hacer con las propiedades implementadas automáticamente.

Otra cosa en la que puede ver la diferencia es al inicializar una propiedad de tipo de clase personalizada.

Si tiene una lista de MyClass Then en el caso de la propiedad Normal, su campo de respaldo se puede inicializar / crear una instancia distinta del constructor.

private List<MyClass> list = new List<MyClass>(); public List<MyClass> List { get { return list; } set { list = value; } }

En caso de propiedad auto implementada,

public List<MyClass> SomeOtherList { get; set; }

Solo puede inicializar SomeOtherList en el constructor, no puede hacerlo a nivel de campo.


Estas son propiedades auto implementadas. Para obtener más información, visite http://msdn.microsoft.com/en-us/library/bb384054.aspx .

La razón básica por la que se introdujeron fueron para reducir la sobrecarga del programador de crear una variable privada como someInt que tenía poco uso que ser utilizada en una propiedad.