views:

2730

answers:

4

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)?

+4  A: 

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

Johannes Schaub - litb
So does that mean I can remove the line containing : base()?
tjrobinson
yes, you can entirely :)
Johannes Schaub - litb
Splendid, thanks.
tjrobinson
+2  A: 

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.

Wilka
+1  A: 

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.

Pop Catalin
+8  A: 

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).

Jon Skeet