2010-07-15 13 views

risposta

18

No. C# non supporta questo in nessuna versione. Si noti che i costruttori sono non ereditati nelle classi derivate, sebbene possano essere "concatenati". Questo è probabilmente quello che vuoi fare.

Se si desidera indicare che la classe derivata deve eseguire una sorta di inizializzazione, è possibile creare un metodo astratto Initialise o simile che il costruttore della classe base (e indirettamente della sottoclasse) chiama alla creazione.

Come punto laterale, non sono sicuro che il CLR (o il linguaggio CIL associato) lo supporti effettivamente - sospetto che possa, anche se è poco utile da C# per il motivo appena menzionato.

18

No, un costruttore non può essere contrassegnato come astratto. Nelle classi astratte i costruttori sono solitamente contrassegnati come protected, ma almeno questo è quello che consiglierei di fare.

+6

In realtà non importa se li contrassegni come 'protected' o normale' public', poiché sono accessibili solo tramite concatenamento in classi derivate comunque! Dicendo che, contrassegnare come "protetto" è probabilmente ragionevole da un punto di vista semantico. – Noldorin

+1

http://msdn.microsoft.com/en-us/library/ms182126(v=vs.100).aspx - sensibile dal punto di vista semantico autorevole –

2

Fondamentalmente no.

Se è astratto, è necessario sovrascriverlo in una classe figlio concreta e non è possibile sovrascrivere un costruttore, ma solo sovraccaricarlo.