¿Por qué no puedo simplemente poner todo en el constructor y por qué la muestra a continuación llama al método de inicialización?
Puede ponerlo todo en el constructor. En este caso simple, deberías. Los constructores son para inicializando su objeto.
A veces hay algo más complicado sin embargo:
- veces querrá un método separado
Initialize
porque quiere llamar a la vez separado de la construcción.
- A veces lo desea porque está escribiendo múltiples constructores, y desea compartir parte de la implementación entre ellos.
- Algunas veces su inicialización es complicada, y usted quiere dar buenos nombres a las piezas para que sepa qué está haciendo su código. Entonces rompes esas piezas en métodos separados.
Ninguno de estos es el caso de este código, así que me lo saltaría y arrojaría el código en el constructor.
¿Hay alguna convención que se use normalmente?
No. La gente hace lo que es más fácil de leer y entender, lo que requiera el mínimo código extra por escribir, y lo que causa la menor duplicación de código.
Sin embargo, si está haciendo que el método Initialize
sea público y no lo llame desde el constructor, le recomiendo que lo llame Initialize
. Diseñarlo para ser llamado solo una vez.
En este ejemplo, necesito la palabra "this." en el método Initialize?
No. Nunca necesita utilizar this
para acceder a los miembros de la clase a menos que tenga otra variable local con el mismo nombre. He aquí un caso así:
public class Something
{
private string someValue;
public class Something(string someValue)
{
// must use "this" to access the member variable,
// because a local variable has the same name
this.someValue = someValue;
}
}
De esta manera el código en el método de inicialización puede ser llamado desde otro lugar aparte del constructor. – Megacan
Para sus dos preguntas, una respuesta común: mejor legibilidad. Y para el método por separado, un punto más es ayudar a seguir el principio DRY. – Maheep
Posible duplicado: http://stackoverflow.com/questions/4414471/initialize-vs-constructor-method-proper-usage-on-object-creation –