me he dado cuenta de que el C# propiedad constructo también se puede utilizar con un modificador privada acceso:¿Hay alguna razón para usar propiedades privadas en C#?
private string Password { get; set; }
Aunque esto es técnicamente interesante, no me puedo imaginar cuando lo uso ya que un ámbito privado implica incluso menos ceremonia:
private string _password;
y no puedo imaginar que cuando alguna vez necesito estar poder internamente obtener pero no conjunto o conjunto pero no obtener un campo privado:
private string Password { get; }
o
private string Password { set; }
pero tal vez no es un caso de uso con clases anidadas/heredadas o quizás cuando get/set puede contener lógica en lugar de simplemente devolver el valor de la propiedad, aunque tendería a mantener las propiedades estrictamente simples y permitir que los métodos explícitos hagan cualquier lógica, p. GetEncodedPassword()
.
¿Alguien usa propiedades privadas en C# por alguna razón o es solo una de esas construcciones de código técnico técnicamente posibles pero rara vez usadas?
Adición
Niza respuestas, leer a través de ellos que sacrificaron estos usos para las propiedades privadas:
- cuando los campos privados necesitan ser cargados de forma liviana
- cuando los campos privados necesitan lógica adicional o se calculan valores
- ya que los campos privados pueden ser difíciles de depurar
- para "presentar un contrato a usted mismo"
- para convertir internamente/simplificar una propiedad expuesta como parte de serialización
- envolviendo variables globales para ser utilizado dentro de su clase
"cadena privada Contraseña {get;}" ni siquiera es legal C#. No compilará –
@eric true, obtiene el error "... Password.get" debe declarar un cuerpo porque no está marcado como abstracto o externo. Las propiedades implementadas automáticamente deben definir los accesadores get y set. " Simplemente asumí que funcionaría, ya que utilizo 'public string Password {get {return _password; }} 'a menudo. –
La técnica recomendada por las propiedades privadas es * autoencapsulación * - ver: http://sourcemaking.com/refactoring/self-encapsulate-field – LBushkin