title: why virtual is allowed while implementing the interface methods?
body: <p>I have one specific query with the interfaces.</p>
  <p>By default interface methods are abstract and virtual so if we implement that interface and gives definition in the class we actually override that method but when we mark the method as a virtual again in the implementing class why the compiler is not considering that we are actually trying to hide the original interface virtual method.</p>
  <p>Like if we have a virtual method in the base class and derived class again marked the method as virtual in that case compiler gives the warning that you are hiding the base class method so use new if you are intentionally hiding the base class method.</p>
  <pre class="lang-cs prettyprint-override"><code>public interface ITestInterface
  {
      void virtualmethod(); // this method is by default virtual. 
  }
  </code></pre>
  <pre class="lang-cs prettyprint-override"><code>public class TestInterface :ITestInterface
  {
     public virtual void virtualmethod()
     {
      // Now compiler should consider that i am actually hiding the interface virtual method.
     }
  }
  </code></pre>
  <p>if you build the above code for interface and open in ILDASM you will see the code like this:</p>
  <pre><code>.method public hidebysig newslot abstract virtual
           instance void virtualmethod() cil managed
  {
  }//end of method ITestInterface::virtualmethod
  </code></pre>