.NET Windows Store应用程序和System.Type - 相当于运算符==吗?

3
根据这个StackOverflow问题的被接受的答案,System.Type.Equals方法和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.

Windows Store应用程序中,System.Type operator ==不可用。
我该如何完全复制System.Type operator ==的功能以在Windows Store应用程序中使用?或者说,System.Type的特定等式运算符功能在Windows Store应用程序中不相关吗?
1个回答

5
因此,这里的基本原则是Equals是每个类型的虚拟实例方法,这意味着它将使用vtable来确定在运行时基于实际调用Equals的对象的类型(忽略变量的类型)要使用哪种实现。 operator ==可以被视为一个静态方法(带有许多重载)。它不是虚拟的,因此所引用的实现将基于持有对象的变量的编译时类型,并且不会基于对象在运行时的实际类型。
通过简单地创建自己的staticEquals方法(在您喜欢的任何类型或类型上),可以复制此行为,这些方法根据两个参数的类型进行操作。尽管键入稍微麻烦一些,但一旦编译完成,它们与使用operator ==几乎相同。

非常感谢您提供这个非常有用的答案,Servy。现在我只需要继续看看如何将其应用到我的项目中 :-) - Anders Gustafsson
1
@AndersGustafsson 这很简单。你只需要为每种需要比较的类型编写一个静态的Equals方法,其中它接受的两个参数是该类型的实例。在静态方法中,您还需要不要调用虚拟的Equals实例方法,因为如果被覆盖,您将失去所需的行为。 - Servy
具体情况是,我正在考虑移植一个现有的第三方库。我还不确定,但可能这个问题适用于相对较多的类。理想情况下,我不想为大量的类编写新的“Equals”方法,“只是为了安全起见”。但无论如何,这超出了我的问题范围,我需要深入挖掘项目以掌握情况。无论如何,非常感谢您及时而详细的回复,再次感谢。 - Anders Gustafsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接