Calling an overridable method from a constructor could result in failures or strange behaviors when instantiating a subclass which overrides the method.


For example:

* The subclass class constructor starts by calling the parent class constructor.
* The parent class constructor calls the method, which has been overridden in the child class.
* If the behavior of the child class method depends on fields that are initialized in the child class constructor, unexpected behavior (like a ``++NullReferenceException++``) can result, because the fields aren't initialized yet.

== Noncompliant Code Example

----
public class Parent 
{
  public Parent() 
  {
    DoSomething();  // Noncompliant
  }

  public virtual void DoSomething() // can be overridden
  {  
    ...
  }
}

public class Child : Parent 
{
  private string foo;

  public Child(string foo) // leads to call DoSomething() in Parent constructor which triggers a NullReferenceException as foo has not yet been initialized
  {
    this.foo = foo;
  }

  public override void DoSomething() 
  {
    Console.WriteLine(this.foo.Length);
  }
}
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
