title: overriding an interface method not marked as virtual
body: <p>I'm writing a log4net appender.  They have an AppenderSkeleton class which implements IAppender:</p>
  
  <pre><code>public abstract class AppenderSkeleton : IBulkAppender, 
      IAppender, IOptionHandler
  </code></pre>
  
  <p>They way the AppenderSkeleton class works is they implement the DoAppend() method of IAppender and do a bunch of work for you, like calling the filter chain, and then call an abstract method called Append().  While this is reasonable, I would like to execute some of my code before the filters run.  I could implement the IAppender interface myself but at first I figured I would just try to override DoAppend() in my derived class, do my stuff, and then call base.DoAppend().  It was at this point where I noticed the AppenderSkeleton didn't mark DoAppend() as virtual since I got a compiler error indicating I couldn't override the method since it wasn't marked virtual.</p>
  
  <p>I then had my class derive from IAppender and explicitly implemented the IAppender.DoAppend() method.  I was surprised that the code compiled without issues.  Below is my DoAppend() method:</p>
  
  <pre><code>void IAppender.DoAppend(LoggingEvent evnt)
  {
      .
      .
      .
      base.DoAppend(evnt);
  }
  </code></pre>
  
  <p>I haven't tried running it yet but wondering if someone might now what the runtime will end up doing with this implementation?</p>
  
  <p>Thanks,
  Nick</p>