当前位置:  开发笔记 > 编程语言 > 正文

在类"对象"中定义的==运算符在哪里?

如何解决《在类"对象"中定义的==运算符在哪里?》经验,为你挑选了2个好方法。

我搜索了FCL的源代码,我对此string.Equals()使用感到困惑Object.ReferenceEquals(),并Object.ReferenceEquals()使用==operator to jugde.然后我找不到如何==定义运算符.

那么原始运算符在哪里定义?



1> Christos..:

这是该语言用于验证两个值是否相同的运算符.当你的代码被编译时,这个运算符将在CIL中被适当地编译,然后当我们将由CLR执行时,将比较两个值以检查它们是否相同.

例如,这是该Main方法的CIL代码:

在此输入图像描述

编译器为以下程序生成(它是一个控制台应用程序):

class Program
{
    static void Main(string[] args)
    {
        int a = 3;
        int b = 4;
        bool areEqual = a == b;
        Console.WriteLine(areEqual);
    }
}

注意IL_0007行.有一个ceq指令已经发出.这是您正在寻找的,==运营商.

重要的提示

==没有超载时会发生这种情况.



2> Damien_The_U..:

当没有重载==运算符(如此处)时,编译器会发出ceq指令.在这一点上,没有更多的C#代码可供查看.

比较两个值.如果它们相等,则将整数值1(int32)推送到评估堆栈; 否则0(int32)被推到评估堆栈上.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有