title: why Object.GetType() is not virtual?
body: <p>code sample taken from MSDN</p>
  
  <pre><code>public class Test {
  public static void Main() {
    MyBaseClass myBase = new MyBaseClass();
    MyDerivedClass myDerived = new MyDerivedClass();
    object o = myDerived;
    MyBaseClass b = myDerived;
  
    Console.WriteLine("mybase: Type is {0}", myBase.GetType());
    Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
    Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
    Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());   }}
  
  /*
  This code produces the following output.
  mybase: Type is MyBaseClass
  myDerived: Type is MyDerivedClass
  object o = myDerived: Type is MyDerivedClass
  MyBaseClass b = myDerived: Type is MyDerivedClass 
  */
  </code></pre>
  
  <p>So would it be logical to make GetType() virtual at least it works as virtual? Can anybody explaine that?
  And other question Is any other methods in NET framework which have behaviour alike GetType?</p>