Duplicar posible:
Convention question: When do you use a Getter/Setter function rather than using a Propertycaptadores y definidores deben y no deben hacer
me he encontrado un montón de opiniones diferentes sobre los captadores y definidores últimamente, por lo que pensé Debería convertirlo en su propia pregunta.
A previous question mío recibió un comentario inmediato (más tarde eliminado) que establece setters no debería tener ningún efecto secundario, y un método SetProperty
sería una mejor opción.
De hecho, esto parece ser Microsoft's opinion también. Sin embargo, sus propiedades suelen generar eventos, como Resized
cuando se establece la propiedad Width
o Height
de un formulario. OwenP también establece que "no debe permitir que una propiedad genere excepciones, las propiedades no deberían tener efectos secundarios, el orden no debería importar y las propiedades deberían regresar con relativa rapidez".
Sin embargo, Michael Stum indica que deben producirse excepciones al validar los datos dentro de un setter. Si su incubadora no lanza una excepción, ¿cómo podría usted efectivamente validar los datos, como sugieren muchas de las respuestas a this question?
¿Qué ocurre cuando necesita plantear un evento, como casi todos los de Control de Microsoft? ¿No estás entonces a merced de quien se suscribió a tu evento? Si su manejador realiza una cantidad masiva de información, o arroja un error en sí mismo, ¿qué le sucede a su incubadora?
Finalmente, ¿qué hay de lazy loading dentro del captador? Esto también podría violar las pautas anteriores.
¿Qué se puede colocar en un getter o setter, y qué se debe guardar en los métodos de acceso solamente?
Editar:
Desde otro article en el MSDN:
Los métodos
get
yset
son generalmente no es diferente de otros métodos. Pueden realizar cualquier lógica de programa, lanzar excepciones, anularse y declararse con cualquier modificador permitido por el lenguaje de programación. Tenga en cuenta, sin embargo, que las propiedades también pueden ser estáticas. Si una propiedad es estática, existen limitaciones sobre lo que pueden hacer los métodosget
yset
. Consulte su referencia de lenguaje de programación para más detalles.
Leí esa pregunta, las respuestas, e incluso me vinculé a ella en mi propia pregunta. No vi nada sobre la generación de eventos, que creo que merece diferentes respuestas. – dlras2
@Rowland: creo que es lo suficientemente específico como para ser diferente. –
¿Quién votó para que esto se migrara a Superusuario? – ChrisF