2011-01-12 26 views
17

Hay algunas bibliotecas .NET que usan métodos para acceder a los datos del objeto en lugar de captadores, es decir, HttpWebResponse.GetResponseStream().Cuándo usar el método GetXXX() y cuándo una propiedad Getter

También hay ejemplos de acceso a una transmisión por una propiedad, es decir, HttpResponse.OutputStream.

Mi pregunta es cuándo usar qué forma de acceso y por qué?

Respuesta

9
+0

Eso indica que es malo tener propiedades que devuelven matrices. ¿Alguien puede explicar * por qué * eso es malo? –

+1

Porque el contenido de la matriz puede cambiarse a cualquier valor arbitrario por cualquiera que pueda obtener una referencia: http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-considered- algo-harm.aspx – thecoop

+0

Si devuelve una matriz desde una propiedad, realmente está devolviendo un puntero a esa matriz. Esto significa que de repente lo ha hecho para que otro código pueda modificar su matriz, incluso si no proporciona un método setter. Entonces, el contenido de tu matriz podría cambiarse sin que lo sepas. – GendoIkari

1

Mi opinión que, estoy seguro, llegará a -10 muy rápido, es que solo debe usar las propiedades para la serialización. En todos los demás casos, es preferible llamar al método explícito porque, cuando lo mira, sabe que se está invocando un método con posibles efectos secundarios.

Supongo que la respuesta "correcta" (tm) es que cuando todo lo que su método haría es devolver el valor, está bien usar getter/setter, pero si hay algo que hacer, use un método.

+3

Property Getters ** nunca ** debe tener efectos secundarios, si tiene efectos secundarios, acepto utilizar un método en su lugar. – BrokenGlass

+0

Un poco simplista. Las propiedades no son tan simples; le permiten realizar operaciones que requieren que el trabajo parezca asignaciones/recuperaciones simples, evitando el embrollo de métodos para algunos datos y campos para otros (y reduciendo la complejidad de refactorizar usos de un campo que ahora requiere trabajo interno). – KeithS

3

Buena pregunta. El artículo This presenta algunos puntos buenos. En general, utilizo métodos cuando el cálculo es costoso y las propiedades cuando el cálculo no es costoso (es decir, se devuelve un valor almacenado).

8

Buena pregunta. Aunque una propiedad es poco más que azúcar sintáctica para un par de métodos get/set, se deben usar dos en diferentes momentos.

En general, se debe utilizar un captador de estilo propiedad cuando:

  • El valor a ser devuelto representa los datos de campo como (generalmente primitivas tipos/valor, sino una referencia a otro objeto de dominio también está muy bien)
  • el cálculo, en su caso, para producir que el valor es relativamente barato/libre de efectos secundarios
  • Conseguir el mismo valor dos veces producirá el mismo valor dado las mismas entradas

Por lo general, debe usar un método getter cuando:

  • El objeto devuelto se crea con ese propósito (p. métodos de fábrica)
  • Evaluar el valor devuelto requiere efectos secundarios (por ejemplo, tocar un sistema de archivos, base de datos o cambiar otros valores)
  • Obtener el tipo de resultado dos veces generará dos resultados distintos (es decir, dos flujos, conexiones de base de datos, etc.) .

En una oración, si conceptualmente hablando el valor necesario es algo que el objeto TIENE, use una propiedad. Si el valor necesario es el resultado de algo que el objeto HACE, use un método.

Cuestiones relacionadas