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

📄 21.3.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="21.2.htm"><img src="previous.gif" alt="previous" border="0" /></a><a href="21.4.htm"><img src="next.gif" alt="next" border="0" /></a></span><span class="clause-depth"><a href="20.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="22.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="21.htm">21</a></span><span class="clause-title-previous"> Enums</span></span><span class="clause-depth"><a href="21.2.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="21.4.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number">21.3</span><span class="clause-title"> Enum members</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 body of an enum type declaration defines zero or more enum members, which are the named constants of the enum type.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P1S2"></a>No two enum members can have the same name.</span> <span class="grammar-production"><span class="name"><a name="enum-member-declarations"></a>enum-member-declarations</span> : <span class="rhs"><span class="non-terminal"><a href="21.3.htm#enum-member-declaration">enum-member-declaration</a></span> </span><span class="rhs"><span class="non-terminal"><a href="21.3.htm#enum-member-declarations">enum-member-declarations</a></span> <span class="terminal">,</span> <span class="non-terminal"><a href="21.3.htm#enum-member-declaration">enum-member-declaration</a></span> </span></span><span class="grammar-production"><span class="name"><a name="enum-member-declaration"></a>enum-member-declaration</span> : <span class="rhs"><span class="non-terminal"><a href="24.2.htm#attributes">attributes</a></span><sub>opt</sub> <span class="non-terminal"><a href="9.4.2.htm#identifier">identifier</a></span> </span><span class="rhs"><span class="non-terminal"><a href="24.2.htm#attributes">attributes</a></span><sub>opt</sub> <span class="non-terminal"><a href="9.4.2.htm#identifier">identifier</a></span> <span class="terminal">=</span> <span class="non-terminal"><a href="14.15.htm#constant-expression">constant-expression</a></span> </span></span></span><span class="locator">
     Paragraph 2</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P2S1"></a>Each enum member has an associated constant value.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P2S2"></a>The type of this value is the underlying type for the containing enum.</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P2S3"></a>The constant value for each enum member must be in the range of the underlying type for the enum.</span> <span class="example">[Example: The example <pre class="code-example">
enum Color: uint  
{  
   Red = -1,  
   Green = -2,  
   Blue = -3  
}  
</pre>results in a compile-time error because the constant values -1, -2, and -3 are not in the range of the underlying integral type <span class="keyword">uint</span>. end example]</span> </span><span class="locator">
     Paragraph 3</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P3S1"></a>Multiple enum members may share the same associated value.</span> <span class="example">[Example: The example <pre class="code-example">
enum Color   
{  
   Red,  
   Green,  
   Blue,  
   
   Max = Blue  
}  
</pre>shows an enum that has two enum members-Blue and Max-that have the same associated value. end example]</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 associated value of an enum member is assigned either implicitly or explicitly.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P4S2"></a>If the declaration of the enum member has a <span class="non-terminal"><a href="14.15.htm#constant-expression">constant-expression</a></span> initializer, the value of that constant expression, implicitly converted to the underlying type of the enum, is the associated value of the enum member.</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P4S3"></a>If the declaration of the enum member has no initializer, its associated value is set implicitly, as follows: </span><ul><li><span class="sentence"><span class="sentence-number">4</span> <a name="P4S4"></a> If the enum member is the first enum member declared in the enum type, its associated value is zero.</span> </li><li><span class="sentence"><span class="sentence-number">5</span> <a name="P4S5"></a> Otherwise, the associated value of the enum member is obtained by increasing the associated value of the textually preceding enum member by one.</span> <span class="sentence"><span class="sentence-number">6</span> <a name="P4S6"></a>This increased value must be within the range of values that can be represented by the underlying type.</span> </li></ul></span><span class="paragraph"><span class="example">[Example: The example <pre class="code-example">
using System;  
enum Color  
{  
   Red,  
   Green = 10,  
   Blue  
}  
class Test  
{  
   static void Main() {  
      Console.WriteLine(StringFromColor(Color.Red));  
      Console.WriteLine(StringFromColor(Color.Green));  
      Console.WriteLine(StringFromColor(Color.Blue));  
   }  
   static string StringFromColor(Color c) {  
      switch (c) {  
         case Color.Red:   
         return String.Format("Red = {0}", (int) c);  
         case Color.Green:  
         return String.Format("Green = {0}", (int) c);  
         case Color.Blue:  
         return String.Format("Blue = {0}", (int) c);  
         default:  
         return "Invalid color";  
      }  
   }  
}  
</pre>prints out the enum member names and their associated values. The output is: <pre class="code-example">
Red = 0  
Green = 10  
Blue = 11  
</pre>for the following reasons: <ul><li> the enum member Red is automatically assigned the value zero (since it has no initializer and is the first enum member); </li><li> the enum member Green is explicitly given the value 10; </li><li> and the enum member Blue is automatically assigned the value one greater than the member that textually precedes it. end example]</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>The associated value of an enum member may not, directly or indirectly, use the value of its own associated enum member.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P5S2"></a>Other than this circularity restriction, enum member initializers may freely refer to other enum member initializers, regardless of their textual position.</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P5S3"></a>Within an enum member initializer, values of other enum members are always treated as having the type of their underlying type, so that casts are not necessary when referring to other enum members.</span> </span><span class="paragraph"><span class="example">[Example: The example <pre class="code-example">
enum Circular  
{  
   A = B,  
   B  
}  
</pre>results in a compile-time error because the declarations of A and B are circular. A depends on B explicitly, and B depends on A implicitly. end example]</span> </span><span class="locator">
     Paragraph 6</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P6S1"></a>Enum members are named and scoped in a manner exactly analogous to fields within classes.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P6S2"></a>The scope of an enum member is the body of its containing enum type.</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P6S3"></a>Within that scope, enum members can be referred to by their simple name.</span> <span class="sentence"><span class="sentence-number">4</span> <a name="P6S4"></a>From all other code, the name of an enum member must be qualified with the name of its enum type.</span> <span class="sentence"><span class="sentence-number">5</span> <a name="P6S5"></a>Enum members do not have any declared accessibility-an enum member is accessible if its containing enum type is accessible.</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 + -