C# GetType()返回超类构造函数中的子类类型
我有三门课:C# GetType()返回超类构造函数中的子类类型,c#,.net,.net-4.0,C#,.net,.net 4.0,我有三门课:ClassA,ClassB,ClassC ClassC扩展ClassB,后者反过来扩展ClassA 当我从ClassA的构造函数调用GetType()时,.net正在返回ClassC的类型。我很困惑,因为这是在代码中发生的,这些代码已经工作了一段时间,但我已经有一段时间没有接触过了。是否存在更改GetType()行为的.net修补程序?我对此表示怀疑。我唯一的另一个想法是,这与我正在使用的测试框架xUnit有关?它的行为完全符合预期GetType()返回对象实例的实际类型,即使它是一
ClassA
,ClassB
,ClassC
ClassC
扩展ClassB
,后者反过来扩展ClassA
当我从
ClassA
的构造函数调用GetType()时,.net正在返回ClassC
的类型。我很困惑,因为这是在代码中发生的,这些代码已经工作了一段时间,但我已经有一段时间没有接触过了。是否存在更改GetType()行为的.net修补程序?我对此表示怀疑。我唯一的另一个想法是,这与我正在使用的测试框架xUnit有关?它的行为完全符合预期GetType()
返回对象实例的实际类型,即使它是一个子类(并且总是以这种方式运行)typeof(ClassA)
另一方面,如果我正确理解您的问题,您有一个ClassA
类型,通过调用它,您可以得到ClassC
。如果是这样,它很可能不是一个真正的ClassA
对象,但它是这样的:
代码中的某个地方有如下初始化:
ClassA=newclassc()
考虑到ClassC:ClassB
和ClassB:ClassA
您可以这样做
GetType()
返回一个实际的对象类型,而不是实际的包装器类型。据我所知,GetType()始终返回实例的类型,而不是基类,无论它在哪里被调用。函数的行为符合预期。它应该始终返回值的实际运行时类型。我不相信任何热点补丁已经改变了这种行为,但您现在看到的行为是绝对正确的
如果您想查看方法的声明类型,请使用以下方法之一
typeof(TheContainingType)
MethodBase.GetCurrentMethod().DeclaringType
奇怪…我不确定我的单元测试是如何通过的。无论如何,我似乎应该使用typeof()全部-谢谢!每个人似乎都在说同样的话…这是预期的工作,因为它总是。