rspec/rules/S1699/csharp/rule.adoc

50 lines
1.2 KiB
Plaintext

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);
}
}
----
ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)
include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]