A volte può risultare utile che i costruttori delle classi derivate implementino una certa firma. Se fosse stato un metodo o una proprietà bastava definirli come abstract, ma il costruttore non può essere dichiarato tale.
Possiamo comunque eludere il sistema in questo modo:
abstract class Base
{
protected string _message;
public Base(string message)
{
_message = message;
}
}
class Derived : Base
{
public Derived(string message) : base(message) {}
}
Di fatto, stiamo eliminando il costruttore di default (quello senza parametri) ma dichiarando un'unico costruttore con firma. Non è certamente una cosa complessa, ma può risultare molto utile.