En C#, si tiene varios constructores, se puede hacer algo como esto:varios constructores con una lógica compleja
public MyClass(Guid inputId, string inputName){
// do something
}
public MyClass(Guid inputId): this(inputId, "foo") {}
La idea es de la reutilización de código del curso. Sin embargo, ¿cuál es el mejor enfoque cuando se necesita un poco de lógica compleja? Digamos que quiero este constructor:
public MyClass(MyOtherClass inputObject)
{
Guid inputId = inputObject.ID;
MyThirdClass mc = inputObject.CreateHelper();
string inputText = mc.Text;
mc.Dispose();
// Need to call the main Constructor now with inputId and inputText
}
La advertencia aquí es que necesito para crear un objeto que tiene que ser eliminados después de su uso. (Aclaración: no de inmediato, pero tengo que llamar a Dispose() en lugar de esperar a Garbage Collection)
Sin embargo, no veo una forma de llamar al constructor base nuevamente si agrego algún código dentro de mi constructor sobrecargado. ¿Hay alguna manera de llamar al constructor base desde dentro de uno sobrecargado?
O es posible utilizar
public MyClass(MyOtherClass inputObject): this(inputObject.ID,
inputObject.CreateHelper().Text)
{}
¿Esto Desechar automáticamente el objeto generado a partir de CreateHelper()?
Edit: Gracias hasta ahora. Dos problemas: no controlo MyOtherClass y no tengo métodos de extensión (solo .NET 3.0 ...). Sin embargo, yo controlo mi propia clase, y desde que comencé a escribirla, no tengo problemas para refactorizar los constructores si hay un buen enfoque.
Ese es un enfoque bastante inteligente, creo que lo agregaré a mi libro de mejores prácticas :) Eso funcionará. –
Estoy de acuerdo en que el método de inicialización es el patrón más común. Creo que eso es más consistente con el marco. –
Si pudiera darle un voto triple-cuádruple, lo haría ... – TonyOssa