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.