2011-03-16 37 views

Respuesta

1

Según la Property Usage Guidelines en MSDN:

  • utilizar una propiedad cuando el miembro es un miembro de datos lógica. En las siguientes declaraciones de miembros, Name es una propiedad porque es un miembro lógico de la clase.

  • Uso un método cuando:

    • La operación es una conversión, como Object.ToString.
    • La operación es lo suficientemente costosa como para que desee comunicarle al usuario que debe considerar almacenar en caché el resultado.
    • La obtención de un valor de propiedad con el acceso de get tendría un efecto secundario observable.
    • Llamar al miembro dos veces seguidas produce resultados diferentes.
    • El orden de ejecución es importante. Tenga en cuenta que las propiedades de un tipo se deben poder establecer y recuperar en cualquier orden.
    • El miembro es estático pero devuelve un valor que se puede cambiar.
    • El miembro devuelve una matriz. Las propiedades que devuelven matrices pueden ser muy engañosas. Por lo general, es necesario devolver una copia de la matriz interna para que el usuario no pueda cambiar el estado interno.Esto, junto con el hecho de que un usuario puede asumir fácilmente que es una propiedad indexada, conduce a un código ineficiente. En el siguiente ejemplo de código, cada llamada a la propiedad Methods crea una copia de la matriz. Como resultado, 2n + 1 copias de la matriz se crearán en el siguiente ciclo.
+1

Entiendo las propiedades pero no esta respuesta ... Encontré el [Jon Skeet] (http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx) referido en la respuesta de Cody mucho más legible. – KMC

+0

@KMC Estoy de acuerdo, el Sr. Skeet es un maestro/comunicador mucho mejor que su página promedio de MSDN. –

5

Properties son probablemente lo que estás buscando si decides que necesitas obtener y configurar los métodos. Para una discusión decente sobre por qué lo harías y por qué no quieres utilizar las propiedades, echa un vistazo a Jon Skeet's Why Properties Matter.

Una buena razón para usar propiedades en lugar de simplemente exponer los datos internos de la clase es, obviamente, para proteger esa información. Puede controlar el acceso para atributos individuales así como validar datos que se están configurando. También puede implementar propiedades calculadas para calcular valores, esto no aparecerá diferente de cualquier otro atributo para un usuario de su clase.

+0

+1. Preciso al punto. – Pradeep

+1

Las propiedades son lo que significa OP. –

+0

Tenga en cuenta que no puede realizar propiedades que toman parámetros, por lo que puede ser un caso en el que necesite un método Get, en lugar de una propiedad con un getter. –

0

Hay dos razones (en sentido amplio) separadas por qué le puede utilizar en lugar de las propiedades Get/Set métodos:

  1. Usted desea que la brevedad de un campo, pero desea conceder acceso de sólo lectura a el "exterior", mientras readwrite-acceso al "interior".
  2. desea que el brevedad y la connotación de un campo, mientras que secretamente ser capaz de cumplir o manipular las cosas bajo el capó, tales como:
    1. que requieren valores dentro de un cierto rango (en conjunto).
    2. Limpieza o fijación automática de ciertos valores (durante el ajuste).
    3. Actualizar (o postergar la actualización) otros datos dependientes (durante el conjunto).
    4. Evitando un cálculo completo que sería necesario para el campo, hasta que el campo se use realmente (durante get).
    5. Cualquier otra cosa que de otra manera tendría que colocar dentro de un método apropiado, pero preferiría que el mundo exterior aún lo viera como un campo.
Cuestiones relacionadas