📄 13.4.2.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="13.4.1.htm"><img src="previous.gif" alt="previous" border="0" /></a><a href="13.4.3.htm"><img src="next.gif" alt="next" border="0" /></a></span><span class="clause-depth"><a href="12.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="14.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="13.htm">13</a></span><span class="clause-title-previous"> Conversions</span></span><span class="clause-depth"><a href="13.3.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="13.4.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="13.4.htm">13.4</a></span><span class="clause-title-previous"> User-defined conversions</span></span><span class="clause-depth"><a href="13.4.1.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="13.4.3.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number">13.4.2</span><span class="clause-title"> Evaluation of user-defined conversions</span></span><span class="locator">
Paragraph 1</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P1S1"></a>A user-defined conversion converts a value from its type, called the source type, to another type, called the target type.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P1S2"></a>Evaluation of a user-defined conversion centers on finding the most specific user-defined conversion operator for the particular source and target types.</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P1S3"></a>This determination is broken into several steps: </span><ul><li><span class="sentence"><span class="sentence-number">4</span> <a name="P1S4"></a> Finding the set of classes and structs from which user-defined conversion operators will be considered.</span> <span class="sentence"><span class="sentence-number">5</span> <a name="P1S5"></a>This set consists of the source type and its base classes and the target type and its base classes (with the implicit assumptions that only classes and structs can declare user-defined operators, and that non-class types have no base classes).</span> </li><li><span class="sentence"><span class="sentence-number">6</span> <a name="P1S6"></a> From that set of types, determining which user-defined conversion operators are applicable.</span> <span class="sentence"><span class="sentence-number">7</span> <a name="P1S7"></a>For a conversion operator to be applicable, it must be possible to perform a standard conversion (<a href="13.3.htm">§13.3</a>) from the source type to the operand type of the operator, and it must be possible to perform a standard conversion from the result type of the operator to the target type.</span> </li><li><span class="sentence"><span class="sentence-number">8</span> <a name="P1S8"></a> From the set of applicable user-defined operators, determining which operator is unambiguously the most specific.</span> <span class="sentence"><span class="sentence-number">9</span> <a name="P1S9"></a>In general terms, the most specific operator is the operator whose operand type is "closest" to the source type and whose result type is "closest" to the target type.</span> <span class="sentence"><span class="sentence-number">10</span> <a name="P1S10"></a>The exact rules for establishing the most specific user-defined conversion operator are defined in the following sections.</span> </li></ul></span><span class="locator">
Paragraph 2</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P2S1"></a>Once a most specific user-defined conversion operator has been identified, the actual execution of the user-defined conversion involves up to three steps: </span><ul><li><span class="sentence"><span class="sentence-number">2</span> <a name="P2S2"></a> First, if required, performing a standard conversion from the source type to the operand type of the user-defined conversion operator.</span> </li><li><span class="sentence"><span class="sentence-number">3</span> <a name="P2S3"></a> Next, invoking the user-defined conversion operator to perform the conversion.</span> </li><li><span class="sentence"><span class="sentence-number">4</span> <a name="P2S4"></a> Finally, if required, performing a standard conversion from the result type of the user-defined conversion operator to the target type.</span> </li></ul></span><span class="locator">
Paragraph 3</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P3S1"></a>Evaluation of a user-defined conversion never involves more than one user-defined conversion operator.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P3S2"></a>In other words, a conversion from type S to type T will never first execute a user-defined conversion from S to X and then execute a user-defined conversion from X to T.</span> </span><span class="locator">
Paragraph 4</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P4S1"></a>Exact definitions of evaluation of user-defined implicit or explicit conversions are given in the following sections.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P4S2"></a>The definitions make use of the following terms: </span><ul><li><span class="sentence"><span class="sentence-number">3</span> <a name="P4S3"></a> If a standard implicit conversion (<a href="13.3.1.htm">§13.3.1</a>) exists from a type A to a type B, and if neither A nor B are <span class="non-terminal"><a href="11.2.htm#interface-type">interface-type</a></span>s, then A is said to be encompassed by B, and B is said to encompass A.</span> </li><li><span class="sentence"><span class="sentence-number">4</span> <a name="P4S4"></a> The most encompassing type in a set of types is the one type that encompasses all other types in the set.</span> <span class="sentence"><span class="sentence-number">5</span> <a name="P4S5"></a>If no single type encompasses all other types, then the set has no most encompassing type.</span> <span class="sentence"><span class="sentence-number">6</span> <a name="P4S6"></a>In more intuitive terms, the most encompassing type is the "largest" type in the set-the one type to which each of the other types can be implicitly converted.</span> </li><li><span class="sentence"><span class="sentence-number">7</span> <a name="P4S7"></a> The most encompassed type in a set of types is the one type that is encompassed by all other types in the set.</span> <span class="sentence"><span class="sentence-number">8</span> <a name="P4S8"></a>If no single type is encompassed by all other types, then the set has no most encompassed type.</span> <span class="sentence"><span class="sentence-number">9</span> <a name="P4S9"></a>In more intuitive terms, the most encompassed type is the "smallest" type in the set-the one type that can be implicitly converted to each of the other types.</span> </li></ul></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 + -