title: How to "properly" override a base class method?
body: <p>Whenever i override a method of a base class, other than my implementation of this method, i seem to have 3 choices.</p>
  
  <p>1) Call base.Method(), and then provide my implementation.</p>
  
  <p>2) Provide my implementation and then call base.Method()</p>
  
  <p>3) Just provide my implementation.</p>
  
  <p>Recently while using a library i have realized few bugs that were introduced because of not implementing the method as expected by the library. I am not sure if that is bad on part of library, or something wrong in my understanding.</p>
  
  <p>I will take one example.</p>
  
  <pre><code>public class ViewManager {
       public virtual void Customize(){
          PrepareBaseView();
       }
  }
  
  public class PostViewManager {
       public override void Customize(){
          base.Customize();
          PreparePostView();
       }
  }
  
  
  public class PreViewManager {
       public override void Customize(){
          PreparePreView();
          base.Customize();
       }
  }
  
  
  public class CustomViewManager {
       public override void Customize(){
          PrepareCustomView();
       }
  }
  </code></pre>
  
  <p>My question here is that how could a child class know (without taking a look at base class implementation) which order (or option) is being expected by the parent class?
  Is there a way in which parent class could enforce one of the three alternates to all the deriving classes?</p>