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

📄 12.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="12.2.htm"><img src="previous.gif" alt="previous" border="0" /></a><a href="12.3.1.htm"><img src="next.gif" alt="next" border="0" /></a></span><span class="clause-depth"><a href="11.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="13.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number-link"><a href="12.htm">12</a></span><span class="clause-title-previous"> Variables</span></span><span class="clause-depth"><a href="12.2.htm"><img src="previous.gif" alt="previous at this level" border="0" /></a><a href="12.4.htm"><img src="next.gif" alt="next at this level" border="0" /></a> <span class="clause-number">12.3</span><span class="clause-title"> Definite assignment</span></span><span class="locator">
     Paragraph 1</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P1S1"></a>At a given location in the executable code of a function member, a variable is said to be definitely assigned if the compiler can prove, by static flow analysis, that the variable has been automatically initialized or has been the target of at least one assignment.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P1S2"></a>The rules of definite assignment are: </span><ul><li><span class="sentence"><span class="sentence-number">3</span> <a name="P1S3"></a> An initially assigned variable (<a href="12.3.1.htm">&#167;12.3.1</a>) is always considered definitely assigned.</span> </li><li><span class="sentence"><span class="sentence-number">4</span> <a name="P1S4"></a> An initially unassigned variable (<a href="12.3.2.htm">&#167;12.3.2</a>) is considered definitely assigned at a given location if all possible execution paths leading to that location contain at least one of the following: </span></li><ul><li><span class="sentence"><span class="sentence-number">5</span> <a name="P1S5"></a> A simple assignment (<a href="14.13.1.htm">&#167;14.13.1</a>) in which the variable is the left operand.</span> </li><li><span class="sentence"><span class="sentence-number">6</span> <a name="P1S6"></a> An invocation expression (<a href="14.5.5.htm">&#167;14.5.5</a>) or object creation expression (<a href="14.5.10.1.htm">&#167;14.5.10.1</a>) that passes the variable as an output parameter.</span> </li><li><span class="sentence"><span class="sentence-number">7</span> <a name="P1S7"></a> For a local variable, a local variable declaration (<a href="15.5.htm">&#167;15.5</a>) that includes a variable initializer.</span> </li></ul></ul></span><span class="locator">
     Paragraph 2</span><span class="paragraph"><span class="sentence"><span class="sentence-number">1</span> <a name="P2S1"></a>The definite assignment states of instance variables of a <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> variable are tracked individually as well as collectively.</span> <span class="sentence"><span class="sentence-number">2</span> <a name="P2S2"></a>In additional to the rules above, the following rules apply to <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> variables and their instance variables: </span><ul><li><span class="sentence"><span class="sentence-number">3</span> <a name="P2S3"></a> An instance variable is considered definitely assigned if its containing <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> variable is considered definitely assigned.</span> </li><li><span class="sentence"><span class="sentence-number">4</span> <a name="P2S4"></a> A <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> variable is considered definitely assigned if each of its instance variables is considered definitely assigned.</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>Definite assignment is a requirement in the following contexts: </span><ul><li><span class="sentence"><span class="sentence-number">2</span> <a name="P3S2"></a> A variable must be definitely assigned at each location where its value is obtained.</span> <span class="note">[Note: This ensures that undefined values never occur. end note]</span> <span class="sentence"><span class="sentence-number">3</span> <a name="P3S3"></a>The occurrence of a variable in an expression is considered to obtain the value of the variable, except when </span></li><ul><li><span class="sentence"><span class="sentence-number">4</span> <a name="P3S4"></a> the variable is the left operand of a simple assignment, </span></li><li><span class="sentence"><span class="sentence-number">5</span> <a name="P3S5"></a> the variable is passed as an output parameter, or </span></li><li><span class="sentence"><span class="sentence-number">6</span> <a name="P3S6"></a> the variable is a <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> variable and occurs as the left operand of a member access.</span> </li></ul><li><span class="sentence"><span class="sentence-number">7</span> <a name="P3S7"></a> A variable must be definitely assigned at each location where it is passed as a reference parameter.</span> </li></ul></span><span class="paragraph"><span class="note">[Note: This ensures that the function member being invoked can consider the reference parameter initially assigned. end note]</span> <ul><li><span class="sentence"><span class="sentence-number">8</span> <a name="P3S8"></a> All output parameters of a function member must be definitely assigned at each location where the function member returns (through a return statement or through execution reaching the end of the function member body).</span> <span class="note">[Note: This ensures that function members do not return undefined values in output parameters, thus enabling the compiler to consider a function member invocation that takes a variable as an output parameter equivalent to an assignment to the variable. end note]</span> </li><li><span class="sentence"><span class="sentence-number">9</span> <a name="P3S9"></a> The this variable of a <span class="non-terminal"><a href="11.1.htm#struct-type">struct-type</a></span> instance constructor must be definitely assigned at each location where that instance constructor returns.</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 + -