⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14.9.6.htm

📁 This ECMA Standard specifies the form and establishes the interpretation of programs written in the
💻 HTM
字号:
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Hyperlinked ECMA C# Language Specification</title><meta name="author" content="Jon Jagger" /><link rel="stylesheet" href="ecma334.css"></link></head><body><div align="right"><em><a href="http://www.jaggersoft.com">Jon Jagger</a></em></div><div align="right"><a href="mailto:jon@jaggersoft.com">jon@jaggersoft.com</a></div><form method="get" action="http://search.atomz.com/search/"><input size="30" name="sp-q"></input><input type="submit" value="Search C# Spec"></input><input type="hidden" name="sp-a" value="sp10024177"></input><input type="hidden" name="sp-f" value="ISO-8859-1"></input></form><a href="toc.htm">Table of Contents</a> <a href="1.htm">1</a> <a href="2.htm">2</a> <a href="3.htm">3</a> <a href="4.htm">4</a> <a href="5.htm">5</a> <a href="6.htm">6</a> <a href="7.htm">7</a> <a href="8.htm">8</a> <a href="9.htm">9</a> <a href="10.htm">10</a> <a href="11.htm">11</a> <a href="12.htm">12</a> <a href="13.htm">13</a> <a href="14.htm">14</a> <a href="15.htm">15</a> <a href="16.htm">16</a> <a href="17.htm">17</a> <a href="18.htm">18</a> <a href="19.htm">19</a> <a href="20.htm">20</a> <a href="21.htm">21</a> <a href="22.htm">22</a> <a href="23.htm">23</a> <a href="24.htm">24</a> <a href="25.htm">25</a> <a href="notes.htm">Notes</a> <a href="HyperlinkedCSharpECMA.zip">Download</a><span class="ruler"></span><span class="heading">ECMA-334 C# Language Specification</span><span class="navigate"><a href="14.9.5.htm"><img src="previous.gif" alt="previous" border="0" /></a><a href="14.9.7.htm"><img src="next.gif" alt="next" border="0" /></a></span><span class="clause-depth"><a href="13.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="15.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="14.htm">14</a></span><span class="clause-title-previous"> Expressions</span></span><span class="clause-depth"><a href="14.8.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="14.10.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="14.9.htm">14.9</a></span><span class="clause-title-previous"> Relational and type-testing operators</span></span><span class="clause-depth"><a href="14.9.5.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="14.9.7.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number">14.9.6</span><span class="clause-title"> Reference type equality operators</span></span><span class="locator">
     Paragraph 1</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P1S1"></a>The predefined reference type equality operators are: <pre class="code-example">
bool operator ==(object x, object y);  
bool operator !=(object x, object y);  
</pre></span></span><span class="locator">
     Paragraph 2</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P2S1"></a>The operators return the result of comparing the two references for equality or non-equality.</span> </span><span class="locator">
     Paragraph 3</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P3S1"></a>Since the predefined reference type equality operators accept operands of type object, they apply to all types that do not declare applicable operator == and operator != members.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P3S2"></a>Conversely, any applicable user-defined equality operators effectively hide the predefined reference type equality operators.</span> </span><span class="locator">
     Paragraph 4</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P4S1"></a>The predefined reference type equality operators require the operands to be <span class="non-terminal"><a href="11.2.htm#reference-type">reference-type</a></span> values or the value null; furthermore, they require that a standard implicit conversion (<a href="13.3.1.htm">&#167;13.3.1</a>) exists from the type of either operand to the type of the other operand.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P4S2"></a>Unless both of these conditions are true, a compile-time error occurs.</span> <span class="note">[Note: Notable implications of these rules are: <ul><li> It is a compile-time error to use the predefined reference type equality operators to compare two references that are known to be different at compile-time. For example, if the compile-time types of the operands are two class types A and B, and if neither A nor B derives from the other, then it would be impossible for the two operands to reference the same object. Thus, the operation is considered a  compile-time error. </li><li> The predefined reference type equality operators do not permit value type operands to be compared. Therefore, unless a struct type declares its own equality operators, it is not possible to compare values of that struct type. </li><li> The predefined reference type equality operators never cause boxing operations to occur for their operands. It would be meaningless to perform such boxing operations, since references to the newly allocated boxed instances would necessarily differ from all other references. end note]</li></ul></span> </span><span class="locator">
     Paragraph 5</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P5S1"></a>For an operation of the form x == y or x != y, if any applicable operator == or operator != exists, the operator overload resolution (<a href="14.2.4.htm">&#167;14.2.4</a>) rules will select that operator instead of the predefined reference type equality operator.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P5S2"></a>However, it is always possible to select the predefined reference type equality operator by explicitly casting one or both of the operands to type object.</span> <span class="example">[Example: The example <pre class="code-example">
using System;  
class Test  
{  
   static void Main() {  
      string s = "Test";  
      string t = string.Copy(s);  
      Console.WriteLine(s == t);  
      Console.WriteLine((object)s == t);  
      Console.WriteLine(s == (object)t);  
      Console.WriteLine((object)s == (object)t);  
   }  
}  
</pre>produces the output <pre class="code-example">
True  
False  
False  
False  
</pre></span></span><span class="paragraph"><span class="example">The s and t variables refer to two distinct string instances containing the same characters. The first comparison outputs True because the predefined string equality operator (<a href="14.9.7.htm">&#167;14.9.7</a>) is selected when both operands are of type string. The remaining comparisons all output False because the predefined reference type equality operator is selected when one or both of the operands are of type object. </span></span><span class="paragraph"><span class="example">Note that the above technique is not meaningful for value types. The example <pre class="code-example">
class Test  
{  
   static void Main() {  
      int i = 123;  
      int j = 123;  
      System.Console.WriteLine((object)i == (object)j);  
   }  
}  
</pre>outputs False because the casts create references to two separate instances of boxed <span class="keyword">int</span> values. end example]</span> </span><span class="ruler"></span><table><tr><td><table align="left" bgcolor="navy"><tr bgcolor="navy"><td><font face="Arial,sans-serif" size="6" color="yellow"><strong>{ JSL }</strong></font></td></tr></table></td></tr><tr><td><font face="Arial,sans-serif" size="2" color="navy"><strong>Jagger Software Ltd</strong></font></td></tr><tr><td><font face="Arial,sans-serif" size="2" color="navy"><strong>Company # 4070126</strong></font></td></tr><tr><td><font face="Arial,sans-serif" size="2" color="navy"><strong>VAT # 762 5213 42</strong></font></td></tr></table><img src="valid-html401.png" align="left" height="31" width="88" alt="Valid HTML 4.01" /><img src="vcss.gif" align="left" height="31" width="88" alt="Valid CSS" /></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -