We can do something like this:
// in base class protected virtual void Init(){ //do stuff that all objects need to do } //in derived class protected override void Init(){ base.Init(); // if you forget this but it compiles all hell breaks loose //do derived stuff related to this object } I spent a good 15 minutes with a logic error because i simply forgot the base init call.
But there is no keyword to "demand" or contractually force the derived method to call the base equivalent. So if you forget, you're going to have a bad time in some cases where you need to call the base. Or other times where you call base and the derived class didn't need to because it overrides all the base values rather than some of them.
Is there a way to make this more robust/strict so such forgetfulness does not occur.
baseexists in the first place after all - but it is rare. Rare enough that it never warranted the cost of complicating the language and its implementations.