Fix PowerPC regression caused by tracing changes (#11907)
[mono-project.git] / mcs / docs / ecma334 / 11.3.2.xml
blob9d9a300193ec3630b46fd6e4a755ca9f5324bd51
1 <?xml version="1.0"?>
2 <clause number="11.3.2" title="Unboxing conversions">
3   <paragraph>An unboxing conversion permits an explicit conversion from type object to any <non_terminal where="11.1">value-type</non_terminal> or from any <non_terminal where="11.2">interface-type</non_terminal> to any <non_terminal where="11.1">value-type</non_terminal> that implements the <non_terminal where="11.2">interface-type</non_terminal>. An unboxing operation consists of first checking that the object instance is a boxed value of the given <non_terminal where="11.1">value-type</non_terminal>, and then copying the value out of the instance. </paragraph>
4   <paragraph>Referring to the imaginary boxing class described in the previous section, an unboxing conversion of an object box to a <non_terminal where="11.1">value-type</non_terminal> T consists of executing the expression ((T_Box)box).value. <example>[Example: Thus, the statements <code_example><![CDATA[
5 object box = 123;  
6 int i = (int)box;  
7 ]]></code_example>conceptually correspond to <code_example><![CDATA[
8 object box = new int_Box(123);  
9 int i = ((int_Box)box).value;  
10 ]]></code_example>end example]</example> </paragraph>
11   <paragraph>For an unboxing conversion to a given <non_terminal where="11.1">value-type</non_terminal> to succeed at run-time, the value of the source operand must be a reference to an object that was previously created by boxing a value of that <non_terminal where="11.1">value-type</non_terminal>. If the source operand is null or a reference to an incompatible object, a System.InvalidCastException is thrown. <table_line/>
12 </paragraph>
13 </clause>