2010-08-27 10 views
8

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#?

+2

¿qué estás preguntando? Eso (una sola oración) es indescifrable. – tster

+0

Lo he editado en gran medida. Creo que esto es a lo que se refería. – Timwi

+0

Creo que la última frase "... como privado en primer lugar" debe cambiarse a "... como público al principio". –

Respuesta

2

Porque puede validar el valor especificado en una propiedad.

+0

Esto no es realmente un argumento porque si luego encuentra la necesidad de hacer esto, puede * todavía * introducir la propiedad. – Timwi

+0

@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

+0

Sí, pero como usted mismo señaló, solo se aplica a las bibliotecas. Tu respuesta no dice eso. – Timwi

0

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.

+1

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

13

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.

+1

Muy buena explicación. – Hari

0

Aquí hay algunas razones por las que utilizamos propiedades públicas en lugar de campos públicos.

  1. Puede escribir códigos más complejos en métodos get/set, mientras que sólo hay un único valor en los campos.
  2. 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.
  3. Algunos atributos funcionan para las propiedades solamente (AttributeTargets.Property).
0

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.

Cuestiones relacionadas