Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetType()返回超类构造函数中的子类类型_C#_.net_.net 4.0 - Fatal编程技术网

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()全部-谢谢!每个人似乎都在说同样的话…这是预期的工作,因为它总是。