variable usar una tag pasar otro informacion formularios formulario form entre datos comunicar comunicacion acceder c# properties

usar - tag c#



¿Cómo puedo acceder a la variable de respaldo de una propiedad implementada automáticamente? (6)

En el pasado, declaramos propiedades como esta:

public class MyClass { private int _age; public int Age { get{ return _age; } set{ _age = value; } } }

Ahora podemos hacer:

public class MyClass { public int Age {get; set;} }

Mi pregunta es, ¿cómo puedo acceder a la variable privada que se crea automáticamente usando esta notación?

Preferiría acceder a la variable privada y no al acceso público ''Edad''. ¿Hay una notación predeterminada para acceder a la variable privada, o simplemente no es posible?


Detrás de escena, lo que sucede es la inyección de una variable de miembro privado, con el prefijo <> k__AutomaticallyGeneratedPropertyField #

Desde C # 3.0 Propiedades automáticas explicadas

Aunque puede ser posible usar ese miembro privado directamente, es muy hacky e innecesario.


El objetivo de las nuevas propiedades automáticas es reducir la cantidad de código repetitivo que necesita escribir cuando solo tiene una propiedad simple que no necesita ninguna lógica especial en el conjunto o en el conjunto.

Si desea acceder al miembro privado que utilizan estas propiedades, eso suele deberse a varios motivos:

  • Necesita algo más que un simple get / set: en este caso, debe evitar el uso de propiedades automáticas para este miembro.
  • Desea evitar el golpe de rendimiento al pasar por la obtención o el ajuste y simplemente usar el miembro directamente; en este caso, me sorprendería si realmente hubiera un golpe de rendimiento. Los miembros simples get / set son muy fáciles de alinear, y en mi prueba (ciertamente limitada) no he encontrado una diferencia entre usar las propiedades automáticas y acceder al miembro directamente.
  • Solo desea tener acceso de lectura público (es decir, solo ''obtener'') y la clase escribe directamente al miembro; en este caso, puede usar un conjunto privado en su propiedad automática. es decir

    public class MyClass { public int Age {get; private set;} }

Por lo general, esto cubre la mayoría de las razones para querer acceder directamente al campo de respaldo utilizado por las propiedades automáticas.


El uso de propiedades automáticas implica que no necesita ninguna lógica de obtención / configuración para la propiedad, por lo que no es necesaria una variable de respaldo privada.

No use propiedades automáticas si tiene alguna lógica compleja en su clase. Simplemente vaya private int _age y getters / setters normales como lo haría normalmente.

Las propiedades automáticas IMO son más adecuadas para implementar rápidamente objetos desechables o cápsulas de datos temporales como:

public class TempMessage { public int FromID { get; set; } public int ToID { get; set; } public string Message { get; set; } }

Donde no necesitas mucha lógica


Esta sintaxis es comúnmente llamada "azúcar de sintaxis", lo que significa que el compilador toma esa sintaxis y la traduce a otra cosa. En su ejemplo, el compilador generaría un código que se vería así:

[CompilerGenerated] private int <Age>k_BackingField; public int Age { [CompilerGenerated] get { return this.<Age>k_BackingField; } [CompilerGenerated] set { this.<Age>k_BackingField = value; }

Incluso sabiendo todo eso, es probable que pueda acceder al campo de respaldo directamente, pero eso de alguna manera frustra el propósito de usar propiedades automáticas. Probablemente lo diga aquí porque luego depende de un detalle de implementación que podría cambiar en cualquier momento en una versión futura del compilador de C #.


No deberías, y es muy poco probable que lo necesites. Si necesita acceder a la propiedad, solo use la propiedad pública (por ejemplo, this.Age). No hay nada especial en el campo privado que respalda la propiedad pública, usarlo de preferencia a la propiedad es simplemente una superstición.


No se puede, es una función de idioma en lugar de una función IDE. Para ser sincero, prefiero que IDE agregue la variable privada para ti. Estoy de acuerdo en que es un poco raro que la clase tenga que usar internamente el punto de entrada público para acceder a sus propias variables. Por lo tanto, yo no uso mucho esta nueva característica.