class MyClass<T> where T: new()
{
public Test()
{
var t = new T();
var t = new T("blah"); // <- How to do this?
}
}
So che non è possibile come scritto, e per quanto ho capito è semplicemente non consentito (anche se non mi piacerebbe altro che sbagliarmi). La prima soluzione che viene in mente è quella di utilizzare un inizializzatore di oggetti, ma supponiamo che sia l'ultima risorsa perché in questo caso sarebbe in conflitto con altri obiettivi di oop.Istanziare un tipo generico con un costruttore sovraccarico
La mia prossima inclinazione sarebbe quella di utilizzare la riflessione, ma prima di farlo vorrei sapere se sto trascurando un modo più semplice per farlo o forse un modello di progettazione diverso che funzionerebbe meglio?
Direi che Reflection è la tua unica speranza. Ma con la riflessione bisogna fare affidamento sulla convenzione piuttosto che sul controllo del tempo di compilazione che probabilmente è quello che stai cercando. Forse potresti usare una fabbrica forse, ma non riesco a vedere come una fabbrica possa essere generica e fare ancora il lavoro. Inizializzazione oggetto! = OOP. –
Sono d'accordo con @ MikaelÖstberg e cerco di usare una fabbrica. – Lukazoid
Ma la fabbrica potrebbe essere generica? Affronterei le stesse sfide di quello che vediamo ora nel codice. Le fabbriche dovrebbero essere concrete. –