Question

I have a BasePage class which all other pages derive from:

public class BasePage

This BasePage has a constructor which contains code which must always run:

public BasePage()
{
    // Important code here
}

I want to force derived classes to call the base constructor, like so:

public MyPage
    : base()
{
    // Page specific code here
}

How can I enforce this (preferably at compile time)?

Was it helpful?

Solution

The base constructor will always be called at some point. If you call this(...) instead of base(...) then that calls into another constructor in the same class - which again will have to either call yet another sibling constructor or a parent constructor. Sooner or later you will always get to a constructor which either calls base(...) explicitly or implicitly calls a parameterless constructor of the base class.

See this article for more about constructor chaining, including the execution points of the various bits (such as variable initializers).

OTHER TIPS

The base class constructor taking no arguments is automatically run if you don't call any other base class constructor taking arguments explicitly.

The base class constructor is always called, even if you don't call it explicitly. So you don't need to do any extra work to make sure that happens.

One of the base constructors always needs to be called, and the default one is called when the base constructor is not explicitly stated.

Edit: rephrased for clarity.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top