title: Why isn't the interface member mapped to the non-static method of the derived class
body: <p>I write a interface and a base class <code>A</code> implementing it, and then a derived class <code>B</code>:</p>
  
  <pre><code>interface ITest
  {
      void fn();
  }
  
  class A: ITest
  { 
  
      void ITest.fn()
      {
          Console.WriteLine("fn in A");
      }
  }
  
  class B: A
  {
  
      public void fn()
      {
          Console.WriteLine("fn in B");
      }
  
  }
  
  class Program
  {
      static void Main(string[] args)
      {
          ITest tan = new B();
          tan.fn();
          Console.Read();
      }
  }
  </code></pre>
  
  <p>The result shows that the <code>fn</code> in <code>A</code> is called. But according to the <a href="https://msdn.microsoft.com/en-us/library/aa664592(v=vs.71).aspx" rel="nofollow noreferrer">interface mapping rules</a>, I am quite puzzled:</p>
  
  <blockquote>
    <ol>
    <li><p>If S contains a declaration of an explicit interface member
    implementation that matches I and M, then this member is the
    implementation of I.M. </p></li>
    <li><p>Otherwise, if S contains a declaration of a
    non-static public member that matches M, then this member is the
    implementation of I.M.</p></li>
    </ol>
  </blockquote>
  
  <p>For an instance of <code>B</code>, it doesn't match the rule 1, there is no explicit interface member implementation. 
  However, it has its own non-static public member <code>fn</code>, which I think matchs the rule 2. So the <code>tan.fn()</code> should call the method <code>fn</code> of <code>B</code>, there is no need to look for another <code>fn</code> in its base class <code>A</code>.</p>
  
  <p>What is wrong?</p>
  
  <p>(Solving this problem will help me understand interface reimplemention)</p>