3

根据对此System.Type.EqualsStackOverflow 问题的公认答案,方法和之间存在差异System.Type operator ==

a runtime type (represented by the internal type RuntimeType), managed by 
the CLR is not always the same as a Type, which can be extended. Equals 
will check the underlying system type, whereas == will check the type itself.

.NET for Windows Store Apps中,System.Type 运算符 ==不可用。

如何完全重现Windows 应用商店应用程序System.Type operator ==中的功能?或者,特定的相等运算符功能是否与Windows 应用商店应用程序无关?System.Type

4

1 回答 1

5

所以这里的基本原理是Equals每个类型的虚拟实例方法,这意味着它将使用 vtable 来确定要使用的实现,在运行时,基于调用的实际对象Equals的类型(忽略变量的类型) .

operator ==可以被认为是一种静态方法(有很多重载)。它不是虚拟的,因此所引用的实现将基于保存对象的变量的编译时类型,而不是基于运行时对象的实际类型。

这种行为可以通过简单地创建您自己的static Equals方法(在您喜欢的任何类型或类型上)来复制,这些方法基于两个参数的类型来表现。这比 using 输入起来稍微不方便operator ==,但是一旦编译就可以有效地完成相同的事情。

于 2013-02-19T15:06:34.090 回答