为什么Object.GetType()不是虚拟的?

Ars*_*eny 18 .net c# architecture

从MSDN获取的代码示例

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 
*/
Run Code Online (Sandbox Code Playgroud)

那么使GetType()虚拟至少它作为虚拟工作是合乎逻辑的吗?任何人都可以解释一下吗?和其他问题.NET框架中的任何其他方法都有类似GetType的行为?

thi*_*eek 17

因为.Net框架不希望您覆盖GetType()方法和spoof类型.

假设您可以覆盖该方法除了返回实例的类型之外还希望它做什么.当你为每个类重写方法以返回实例的类型时,你不会违反DRY.

  • 而且合情合理! (3认同)
  • @Arseny:那么它与Object类型中定义的GetType()不同. (2认同)