Not only with an interface; you need an abstract class in the middle:
abstract class Whatever : IFooable { public virtual void Do () { PreDo(); } protected abstract void PreDo(); }
Then you call Do , and PreDo automatically called first for all implementation types.
(Edit: just to be clear, I did Do virtual, so that means that if you base.Do() it, you must first call base.Do() to make sure that it actually calls the parent method).
source share