Si hago que un miembro de la clase sea privado, y luego quiero acceder a ese miembro, debemos definir una propiedad pública para ese miembro. Pero luego me pregunto: si podemos usar al miembro de la clase públicamente al declararle una propiedad pública, ¿por qué no definimos al miembro de la clase como público?¿Por qué usar propiedades públicas para campos privados en C#?
Respuesta
Porque puede validar el valor especificado en una propiedad.
Esto no es realmente un argumento porque si luego encuentra la necesidad de hacer esto, puede * todavía * introducir la propiedad. – Timwi
@Timwi, creo que cambiar un miembro a una propiedad forzará el código que usa el tipo dentro de un .dll para volver a compilar. Si bien esto no es un problema para la mayoría de las personas, si está distribuyendo .dlls para el consumo de terceros, esto debe evitarse. – tster
Sí, pero como usted mismo señaló, solo se aplica a las bibliotecas. Tu respuesta no dice eso. – Timwi
Los descriptores de acceso de propiedad (obtener, establecer métodos) le permiten cambiar su implementación en el futuro. Por ejemplo, puede comenzar con un campo de respaldo (miembro privado de la clase) pero luego la propiedad puede convertirse en el resultado de algún cálculo. Además, la sintaxis de propiedad le permite tener miembros de solo lectura, por lo que puede cambiar el valor solo dentro de su clase, el mundo exterior solo puede leerlo.
Este argumento justifica las propiedades de solo lectura, pero no las de lectura/escritura. Si luego encuentra la necesidad de una propiedad porque se convierte en un valor calculado, aún puede presentar la propiedad. – Timwi
Microsoft recomienda el uso de propiedades públicas en lugar de campos públicos por razones de compatibilidad binaria. Esto solo es un problema si está escribiendo una biblioteca (a la que accederán otros programas).
Básicamente, imagina este escenario:
- Se crea una biblioteca con un campo pública
- Otra persona escribe un programa que utiliza la biblioteca y accede a ese campo público
- ahora quiere cambie su campo a propiedad pública porque necesita validar el valor de entrada, o la propiedad se ha convertido en el resultado de un cálculo, o desea que arroje excepciones porque está obsoleta, o lo que sea.
- El usuario intenta actualizar su biblioteca, pero no el programa que usa la biblioteca.
Esto interrumpirá por completo el programa: dejará de funcionar y solo se bloqueará. Sin embargo, si en lugar del campo tiene una propiedad pública desde el principio, puede cambiar la biblioteca.
Esto es, por supuesto, solo relevante para las bibliotecas. En todos los demás casos, el consejo no es realmente relevante y puede usar los campos si lo desea. Si más tarde descubre que necesitaba una propiedad, aún puede cambiarla a una propiedad y su programa aún compilará bien.
Muy buena explicación. – Hari
Aquí hay algunas razones por las que utilizamos propiedades públicas en lugar de campos públicos.
- Puede escribir códigos más complejos en métodos get/set, mientras que sólo hay un único valor en los campos.
- Propiedades hace que su código sea más "OO". Diga una clase llamada Persona, nosotros podemos adivinar fácilmente que hay una propiedad llamada "Nombre" en ella. Pero un campo público llamado "Nombre" es realmente raro.
- Algunos atributos funcionan para las propiedades solamente (AttributeTargets.Property).
La razón para usar propiedades es muy simple. Siempre puede cambiar el manejo del código obteniendo/configurando su valor sin interrumpir ningún programa externo en función de su trabajo; esto no es posible con los campos.Además, las propiedades se pueden marcar como virtuales y, por lo tanto, se pueden redefinir por clases secundarias, nuevamente sin romper ninguna compatibilidad.
- 1. ¿Debo usar propiedades públicas y campos privados o campos públicos para los datos?
- 2. OO Design: ¿utiliza internamente propiedades públicas o campos privados?
- 3. ¿Por qué prefieren Propiedades a variables públicas?
- 4. ¿Por qué mis propiedades públicas no están serializadas por XmlSerializer?
- 5. Convención de nomenclatura para campos privados
- 6. ¿Por qué utilizar campos en lugar de propiedades?
- 7. Tener propiedades públicas en la clase C++
- 8. ¿Cómo escribe DataContractSerializer en campos privados?
- 9. ¿Hay alguna razón para usar propiedades privadas en C#?
- 10. JavaDoc: campos y métodos privados
- 11. ¿Bloquea el acceso a las variables de miembros privados? ¿Forzar el uso de propiedades públicas?
- 12. ¿Por qué LinqPad crea campos en lugar de propiedades?
- 13. ¿Por qué es necesario invocar: this() en una estructura para usar propiedades automáticas en C#?
- 14. Métodos privados y campos
- 15. Acceso a campos privados
- 16. ¿Cómo leer y establecer campos privados sin un rendimiento alcanzado en C#?
- 17. campos protegidos de Java vs captadores públicas
- 18. ¿Por qué necesitamos Propiedades en C#
- 19. Propiedades vs. Campos: Necesito ayuda para comprender los usos de las propiedades en los campos
- 20. Json.NET Serializar miembros privados y no propiedades de solo lectura
- 21. campos de respaldo Formateo ReSharper para propiedades en C#
- 22. C# ¿Por qué usar SuspendLayout()?
- 23. ¿Cómo obtener propiedades públicas de una clase?
- 24. en C# son métodos privados por defecto?
- 25. ¿Por qué los métodos antlr3 C# parser son privados?
- 26. Convención de nomenclatura para campos privados de VB.NET
- 27. ¿Por qué usar c cadenas en C++?
- 28. ¿Alguna razón para usar las propiedades implementadas automáticamente sobre las propiedades implementadas manualmente?
- 29. ¿Cuándo debería usar métodos públicos/privados/estáticos?
- 30. JavaScript: campos o propiedades
¿qué estás preguntando? Eso (una sola oración) es indescifrable. – tster
Lo he editado en gran medida. Creo que esto es a lo que se refería. – Timwi
Creo que la última frase "... como privado en primer lugar" debe cambiarse a "... como público al principio". –