Calling virtual methods in constructor C# with Example
Unlike C++ in C# you can call a virtual method from class constructor (OK, you can also in C++ but behavior at first is surprising). For example: abstract class Base { protected Base() { _obj = CreateAnother(); } protected virtual AnotherBase CreateAnother() { return new AnotherBase(); } private readonly AnotherBase _obj; } sealed class Derived : Base { public Derived() { } protected override AnotherBase CreateAnother() { return new AnotherDerived(); } } var test = new Derived(); // test._obj is AnotherDerived If you come from a C++ background this is surprising, base class constructor already sees derived class virtual method table! Be careful: derived class may not been fully initialized yet (its constructor will be executed after base class constructor) and this technique is dangerous (there is also a StyleCop warning for this). Usually this is regarded as bad practice.