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?
Prefiero acceder a la variable privada y no al acceso público 'Edad'. ¿Existe una notación predeterminada para acceder a la variable privada o simplemente no es posible?
c#
properties
público estático
fuente
fuente
Respuestas:
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 get o set.
Si desea acceder al miembro privado que utilizan estas propiedades, suele ser por algunas razones:
Solo desea tener acceso de lectura público (es decir, solo un 'get') y la clase escriba 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;} }
Esto generalmente cubre la mayoría de las razones para querer llegar directamente al campo de respaldo utilizado por las propiedades automáticas.
fuente
Su uso de propiedades automáticas implica que no necesita ninguna lógica de obtención / configuración para la propiedad, por lo que una variable de respaldo privada no es necesaria.
No use propiedades automáticas si tiene alguna lógica compleja en su clase. Simplemente vaya a
private int _age
getters / setters normales como lo haría normalmente.En mi opinión, las propiedades automáticas 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.
fuente
Esta sintaxis se denomina comúnmente "azúcar sintáctica", 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 parece a esto:
[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, probablemente podría acceder al campo de respaldo directamente, pero eso frustra el propósito de usar propiedades automáticas. Digo probablemente aquí porque depende de un detalle de implementación que podría cambiar en cualquier momento en una versión futura del compilador de C #.
fuente
De C # 3.0 Explicación de las propiedades automáticas
Aunque puede ser posible usar ese miembro privado directamente, es muy peligroso e innecesario.
fuente
No debería, y es muy poco probable que lo necesite. Si necesita acceder a la propiedad, use la propiedad pública (por ejemplo, this.Age). No hay nada especial en el campo privado que respalda la propiedad pública, usarlo con preferencia a la propiedad es solo una superstición.
fuente
No se puede, es una función de idioma a diferencia de una función IDE. Para ser honesto, preferiría que IDE agregue la variable privada por usted. Estoy de acuerdo en que es un poco extraño que la clase tenga que usar internamente el punto de entrada público para acceder a sus propias variables. Por lo tanto, yo mismo no uso mucho esta nueva función.
fuente