Essential C# Constructors and Finalizers  Suggest an edit

Calling virtual methods in constructor

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.

Table Of Contents
22 Enum
39 Constructors and Finalizers
107 Stream
108 Timers
  ↑ ↓ to navigate     ↵ to select     Esc to close