Все остальные ответы пока верны. Однако следует понимать, что вам не нужно сопоставлять сигнатуру конструктора базового класса с определяемым вами конструктором:
public class Base
{
public Base(string theString) { ... }
}
public class Derived:Base
{
public Derived():base("defaultValue") //perfectly valid
{ ... }
public Derived(string theString)
:base(theString)
{ ... }
public Derived(string theString, Other otherInstance)
:base(theString) //also perfectly valid
{ ... }
}
... и в дополнение к вызову конструктора родительского класса вы также можете "перегрузить" конструкторы в пределах одного и того же уровня наследования, используя ключевое слово this
:
public class FurtherDerived:Derived
{
public FurtherDerived(string theString, Other otherInstance)
:base(theString, otherInstance)
{ ... }
public FurtherDerived()
:this("defaultValue", new Other()) //invokes the above constructor
{ ... }
}