运营商在哪里定义(在C#中)?

cjr*_*uck 1 c# compiler-construction operators

只是想知道C#中的运算符规则实际定义在哪里.

例如,我在哪里可以看到代码说= =检查两个对象的引用?

我可以看到运算符在例如String类中重载,但现在我有兴趣看到'base'的情况.它只是编译器明确知道如何处理的东西,因此没有代码可以使用Reflector等工具查看.

Luk*_*keH 9

你无法在代码中看到它(可能SSCLI中,我没有检查过).

您需要查看C#语言规范.例如:

7.10.6引用类型相等运算符

预定义的引用类型相等运算符是:

bool operator ==(object x, object y);
bool operator !=(object x, object y);
Run Code Online (Sandbox Code Playgroud)

运算符返回比较两个引用的结果是否相等或不相等.

由于预定义的引用类型相等运算符接受类型的操作数object,因此它们适用于未声明适用的运算符==和运算符!= 成员的所有类型.相反,任何适用的用户定义的相等运算符都有效地隐藏了预定义的引用类型相等运算符.


Pau*_*ane 6

==运营商编译成到一个呼叫ceq IL指令.