我搜索了FCL的源代码,我对此string.Equals()
使用感到困惑Object.ReferenceEquals()
,并Object.ReferenceEquals()
使用==
operator to jugde.然后我找不到如何==
定义运算符.
那么原始运算符在哪里定义?
这是该语言用于验证两个值是否相同的运算符.当你的代码被编译时,这个运算符将在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
指令已经发出.这是您正在寻找的,==
运营商.
重要的提示
当==
没有超载时会发生这种情况.
当没有重载==
运算符(如此处)时,编译器会发出ceq
指令.在这一点上,没有更多的C#代码可供查看.
比较两个值.如果它们相等,则将整数值1(int32)推送到评估堆栈; 否则0(int32)被推到评估堆栈上.