title: Why identifier reuse doesn't take effect if a member is called from an up-casted object?
body: <pre><code>class Program
  {
      static void Main(string[] args)
      {
          Parent p = new Child();
          p.Print();
      }
  }
  class Parent
  {
      public virtual void Print()
      {
          Console.WriteLine("This is parent.");
      }
  }
  class Kid:Parent
  {
      public override void Print()
      {
          Console.WriteLine("This is Kid.");
      }
  }
  class Child : Kid
  {
      public new virtual void Print()
      {
          Console.WriteLine("This is Child.");
      }
  }  
  </code></pre>
  
  <p>Why is the output "This is Kid", and not "This is child"?</p>
  
  <p>The <code>Print()</code> in class <code>Child</code> is virtual.<br>
  I'm trying to understand what is happening.</p>