Calling virtual methods in constructor C# with Example



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. 
 

0 Comment's

Comment Form