Note
ăăŽăăźă¸ăŤă˘ăŻăťăšăăăŤăŻăćżčŞăĺż čŚă§ăă ăľă¤ăłă¤ăłăžăăŻăăŁăŹăŻăăŞăŽĺ¤ć´ă芌ăăă¨ăă§ăăžăă
ăăŽăăźă¸ăŤă˘ăŻăťăšăăăŤăŻăćżčŞăĺż čŚă§ăă ăăŁăŹăŻăăŞăŽĺ¤ć´ă芌ăăă¨ăă§ăăžăă
10.1 ĺ ¨čŹ
ĺ¤ćă§ăŻăĺźăçšĺŽăŽĺăŤĺ¤ćăăăăăçšĺŽăŽĺă¨ăăŚćąăăăăăăžăăĺč ăŽĺ ´ĺăĺ¤ćăŤăŻčĄ¨çžăŽĺ¤ć´ăäź´ăĺ ´ĺăăăăžăă ĺ¤ć㯠implicit ăžă㯠explicit ăŤă§ăăžăăăăăŤăăăć示çăŞăăŁăšăăĺż čŚăăŠăăăćąşăžăăžăă
äž: ăă¨ăă°ăĺ
intăăĺlongă¸ăŽĺ¤ćăŻćéťçă§ăăăăăĺintăŽĺźăŻćéťçăŤĺlongă¨ăăŚćąăăă¨ăă§ăăžăă ĺlongăăĺintă¸ăŽéăŽĺ¤ćăŻć示çă§ăăăăăć示çăŞăăŁăšăăĺż čŚă§ăăint a = 123; long b = a; // implicit conversion from int to long int c = (int) b; // explicit conversion from long to intend ăŽäž
ä¸é¨ăŽĺ¤ćăŻč¨čŞăŤăăŁăŚĺŽçžŠăăăžăă ăăă°ăŠă ăŻăçŹčŞăŽĺ¤ćăĺŽçžŠăăăă¨ăă§ăăžă (§10.5)ă
č¨čŞăŽä¸é¨ăŽĺ¤ćăŻăĺźăăĺăŤĺŽçžŠăăăäťăŽĺ¤ćăŻĺăăĺăŤĺŽçžŠăăăžăă ĺăăăŽĺ¤ćăŻăăăŽĺăćă¤ăăšăŚăŽĺźăŤéŠç¨ăăăžăă
äž:
enum Color { Red, Blue, Green } // The expression 0 converts implicitly to enum types Color c0 = 0; // Other int expressions need explicit conversion Color c1 = (Color)1; // Conversion from null expression (no type) to string string x = null; // Conversion from lambda expression to delegate type Func<int, int> square = x => x * x;end ăŽäž
10.2 ćéťçăŞĺ¤ć
10.2.1 ĺ ¨čŹ
揥ăŽĺ¤ćăŻćéťçăŞĺ¤ćă¨ăăŚĺéĄăăăžăă
- ID ĺ¤ć (§10.2.2)
- ćéťçăŞć°ĺ¤ĺ¤ć (§10.2.3)
- ćéťçăŞĺćĺ¤ć (§10.2.4)
- ćéťçăŞćżĺ Ľćĺĺĺ¤ć (§10.2.5)
- ćéťçăŞĺç §ĺ¤ć (§10.2.8)
- ăăăŻăšĺ¤ć (§10.2.9)
- ćéťçăŞĺçĺ¤ć (§10.2.10)
- ćéťçăŞĺăăŠăĄăźăżăźĺ¤ć (§10.2.12)
- ćéťçăŞĺŽć°ĺźăŽĺ¤ć (§10.2.11)
- ăŚăźăśăźĺŽçžŠ (ăŞăăăăĺŤă) ćéťçăŞĺ¤ć (§10.2.14)
- ĺżĺé˘ć°ăŽĺ¤ć (§10.2.15)
- ăĄă˝ăă ă°ăŤăźăĺ¤ć (§10.2.15)
- null ăŞăăŠăŤĺ¤ć (§10.2.7)
- ćéťç㪠null 訹厚ĺ¤ć (§10.2.6)
- ćéťçăŞăżăăŤĺ¤ć (§10.2.13)
- ć˘ĺŽăŽăŞăăŠăŤĺ¤ć (§10.2.16)
- ćéťçăŞăšăăźĺ¤ć (§10.2.17)
- ĺżĺé˘ć°ĺăŽĺ¤ć (§10.2.21)
ćéťçăŞĺ¤ćăŻăé˘ć°ăĄăłăăźĺźăłĺşă (§12.6.6)ăăăŁăšăĺź (§12.9.8)ăäťŁĺ Ľ (§12.24) ăŞăŠăăăžăăžăŞçśćłă§çşçăăĺŻč˝ć§ăăăăžăă
äşĺăŤĺŽçžŠăăăćéťçăŞĺ¤ćăŻĺ¸¸ăŤćĺăăäžĺ¤ăăšăăźăăăăă¨ăŻăăăžăăă
注: éŠĺăŤč¨č¨ăăăăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăăăăăăŽçšć§ă示ăĺż čŚăăăăžăă 注é
ĺ¤ćăŽăăăŤă object ĺ㨠dynamic ĺ㯠ID ĺ¤ćĺŻč˝ă§ă (§10.2.2)ă
ăă ăăĺçĺ¤ć (§10.2.10) ăŻă dynamic ĺ (§8.2.4) ăŽĺźăŤăŽăżéŠç¨ăăăžăă
10.2.2 ID ĺ¤ć
ID ĺ¤ćă§ăŻăäťťćăŽĺăăĺăĺăžăăŻĺŽčĄćăŤĺçăŽĺăŤĺ¤ćăăăžăă ăăŽĺ¤ćăĺĺ¨ăăççąăŽ 1 ă¤ăŻăĺ T ăžă㯠T ĺăŽĺźă T čŞä˝ăŤĺ¤ćĺŻč˝ă§ăăă¨č¨ăăçšă§ăă 揥㎠ID ĺ¤ćăĺĺ¨ăăžăă
- äťťćăŽĺ
TăŽTă¨TăŽéă - ĺç
§ĺ
TăŽT?ă¨TăŽéă -
objectă¨dynamicăŽéă - ĺăă˘ăŞăăŁăćă¤ăăšăŚăŽăżăăŤĺă¨ă寞ĺżăăčŚç´ ĺăŽĺăă˘é㍠ID ĺ¤ćăĺĺ¨ăăĺ ´ĺăŤă寞ĺżăăć§çŻăăă
ValueTuple<...>ĺăŽéă - ĺăăŠăłăŻ (§17.1) ăŽé ĺĺéă§ăčŚç´ ĺé㍠ID ĺ¤ćăĺĺ¨ăăĺ ´ĺă
- 寞ĺżăăĺĺĺźć°ăŽé㍠ID ĺ¤ćăĺĺ¨ăăĺăă¸ă§ăăŞăăŻĺăăć§çŻăăăĺéă
-
Tĺă¨SĺăŽčŚç´ ăĺŤăé ĺĺ (T[]ăS[]ăŞăŠ) ăŽéă§ă2 ă¤ăŽé ĺăŽăŠăłăŻăĺăă§ăTă¨SăŽé㍠ID ĺ¤ćăăăăžăă
äž: 4 çŞçŽăŽčŚĺăŽĺ帰çăŞć§čłŞă揥ăŤç¤şăăžăă
(int a , string b) t1 = (1, "two"); (int c, string d) t2 = (3, "four"); // Identity conversions exist between // the types of t1, t2, and t3. var t3 = (5, "six"); t3 = t2; t2 = t1; var t4 = (t1, 7); var t5 = (t2, 8); // Identity conversions exist between // the types of t4, t5, and t6. var t6 =((8, "eight"), 9); t6 = t5; t5 = t4;ăżăăŤăŽĺ
t1ăt2ăt3ăŤăŻăăăăă 2 ă¤ăŽčŚç´ ăăăăžăăintăŽĺžăŤstringăçśăăžăă ăżăăŤčŚç´ ăŽĺăŻăt4ăt5ăăăăłt6ăŽăăăŤăăżăăŤăŤăăŁăŚăăčŞä˝ă使ç¨ă§ăăžăă ĺ ĽăĺăŤăŞăŁăăżăăŤăĺŤăă寞ĺżăăčŚç´ ĺăŽĺăă˘é㍠ID ĺ¤ćăĺĺ¨ăăăăăăżăăŤăŽĺt4ăt5ăăăăłt6ăŽé㍠ID ĺ¤ćăĺĺ¨ăăžăăend ăŽäž
ăăšăŚăŽ ID ĺ¤ćăŻĺŻžç§°ă§ăă
TâăăTâă¸ăŽ ID ĺ¤ćăĺĺ¨ăăĺ ´ĺăŻăTâăăTâă¸ăŽ ID ĺ¤ćăĺĺ¨ăăžăă 2 ă¤ăŽĺé ID ĺ¤ćăĺĺ¨ăăĺ ´ĺ 2 ă¤ăŽĺăĺ¤ćĺŻč˝ă§ăă
ăťă¨ăăŠăŽĺ ´ĺăID ĺ¤ćăŻĺŽčĄćăŤăŻĺ˝ąéżăăžăăă ăă ăă澎ĺĺ°ć°çšćźçŽăŻĺ (§8.3.7) ă§čŚĺŽăăăŚăăăăăéŤă粞庌ă§ĺŽčĄăăăĺŻč˝ć§ăăăăăăăăŽçľćăäťŁĺ Ľăăă¨ç˛žĺşŚă夹ăăăĺŻč˝ć§ăăăăć示çăŞăăŁăšăăŤăăŁăŚăĺ (§12.9.8) ă§čŚĺŽăăăŚăăăăŽăŤç˛žĺşŚăä˝ä¸ăăăă¨ăäżč¨źăăăžăă
nintă¨System.IntPtrăŽéăăăăłnuintă¨System.UIntPtrăŽéăŤăŻ ID ĺ¤ćăăăăžăă
č¤ĺĺé ĺănull 訹厚ĺăć§çŻĺăăżăăŤăŽĺ ´ĺăăă¤ăăŁăć´ć° (§8.3.6) ă¨ăăŽĺşăŤăŞăĺăŽé㍠ID ĺ¤ćăăăăžăă
10.2.3 ćéťçăŞć°ĺ¤ĺ¤ć
ćéťçăŞć°ĺ¤ĺ¤ćăŻćŹĄăŽă¨ăăă§ăă
-
sbyteăăshortăintănintălongăfloatădoubleăăžăăŻdecimalăžă§ă -
byteăăshortăushortăintăuintănintănuintălongăulongăfloatădoubleăăžăăŻdecimalăžă§ă -
shortăăintănintălongăfloatădoubleăăžăăŻdecimalăžă§ă -
ushortăăintăuintănintănuintălongăulongăfloatădoubleăăžăăŻdecimalăžă§ă -
intăănintălongăfloatădoubleăăžăăŻdecimalăžă§ă -
uintăănuintălongăulongăfloatădoubleăăžăăŻdecimalăžă§ă -
nintăălongăfloatădoubleăăžăăŻdecimalăžă§ă -
nuintăăulongăfloatădoubleăăžăăŻdecimalăžă§ă -
longăăfloatădoubleăăžăăŻdecimalăžă§ă -
ulongăăfloatădoubleăăžăăŻdecimalăžă§ă -
charăăushortăintăuintănintănuintălongăulongăfloatădoubleăăžăăŻdecimalăžă§ă -
floatăădoubleă
intăuintănintănuintălongăăžăăŻulongăăfloată¸ăŽĺ¤ćăăăăłnintănuintălongăăžăăŻulongăădoubleă¸ăŽĺ¤ćăŻă粞庌ăŽć夹ăĺźă辡ăăĺŻč˝ć§ăăăăžăăăćĄăŽć夹ăŻçşçăăžăăă ăăŽäťăŽćéťçăŞć°ĺ¤ĺ¤ćă§ăŻăć
ĺ ąă夹ăăăăă¨ăŻăăăžăăă
charĺă¸ăŽĺŽçžŠć¸ăżăŽćéťçăŞĺ¤ćăăŞăăăăäťăŽć´ć°ĺăŽĺ¤ăŻčŞĺçăŤcharĺăŤĺ¤ćăăăžăăă
10.2.4 ćéťçăŞĺćĺ¤ć
ćéťçăŞĺćĺ¤ćă§ăŻăäťťćăŽć´ć°ĺăćă¤constant_expression (§12.26) ă¨ĺ¤ 0 ăäťťćăŽenum_typeăŤĺ¤ćăăĺşăŤăŞăĺăenum_typeă§ăăäťťćăŽnullable_value_typeăŤĺ¤ćă§ăăžăă ĺžč ăŽĺ ´ĺăĺ¤ćăŻĺşăŤăŞă enum_type ăŤĺ¤ćăăçľćăăŠăăăăăă¨ăŤăăŁăŚčŠäžĄăăăžă (§8.3.12)ă
10.2.5 ćéťçăŞćżĺ Ľćĺĺĺ¤ć
ćéťçăŞćżĺ
Ľćĺĺĺ¤ćă使ç¨ăăă¨ă interpolated_string_expression (§12.8.3) ă System.IFormattable ăžă㯠System.FormattableString ( System.IFormattableăĺŽčŁ
) ăŤĺ¤ćă§ăăžăă ăăŽĺ¤ćăéŠç¨ăăă¨ăćĺĺĺ¤ăŻčŁéćĺĺăăć§ćăăăžăăă 䝣ăăăŤă§12.8.3 ă§čŠłăă誏ćăăăŚăăăăăŤăSystem.FormattableStringăŽă¤ăłăšăżăłăšăä˝ćă
éŠç¨ĺŻč˝ăŞčŁéćĺĺăăłăăŠăźĺ (§23.5.11.1.1) ă§ăăĺTăŤăŻăéĺŽć° ISE (§12.8.3) ăăTă¸ăŽćéťçăŞčŁéćĺĺăăłăăŠăźĺ¤ćăĺĺ¨ăăžăă ăăŽĺ¤ćăŻăăăłăăŠăź ăăżăźăłă使ç¨ăăŚčŁéăä¸ăăăă¨ăăă¨ăăŤă¨ăŠăźăĺžă§čŚă¤ăăŁăăăŠăăăŤé˘äżăŞăĺĺ¨ăăžăă ăăăŤăăăäşć¸ŹĺŻč˝ă§ćç¨ăŞă¨ăŠăźăçşçăăćżĺ
ĽćĺĺăŽĺ
厚ăŤĺşăĽăăŚĺŽčĄćăŽĺä˝ăĺ¤ăăăŞăăă¨ăäżč¨źăăăžăă
10.2.6 ćéťç㪠null 訹厚ĺ¤ć
ćéťç㪠null 訹厚ĺ¤ćăŻăćéťçăŞĺŽçžŠć¸ăżĺ¤ćăăć´žçăă null 訹厚ĺ¤ć (§10.6.1) ă§ăă
10.2.7 Null ăŞăăŠăŤĺ¤ć
null ăŞăăŠăŤăăäťťćăŽĺç
§ĺăžă㯠null 訹厚ĺ¤ĺă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă ăăŽĺ¤ćă§ăŻăăżăźă˛ăăĺăĺç
§ĺăŽĺ ´ĺăăžăăŻćĺŽăăă null 訹厚ĺ¤ĺ㎠null ĺ¤ (§8.3.12) ăŽĺ ´ĺănull ĺç
§ăçćăăăžăă ĺç
§ĺă¸ăŽ null ăŞăăŠăŤĺ¤ćăŻăćéťçăŞĺç
§ĺ¤ć (§10.2.8) ă¨ăăŚăĺéĄăăăžăă
10.2.8 ćéťçăŞĺç §ĺ¤ć
ćéťçăŞĺç §ĺ¤ćăŻćŹĄăŽă¨ăăă§ăă
- äťťćăŽreference_typeă¸ăŽ null ăŞăăŠăŤĺ¤ć (§10.2.7)ă
- äťťć㎠reference_type ăă
objectă¨dynamicăžă§ă reference_typeăSystem.Threading.Lockăăăă¨ăăŤčŚĺăçşčĄăăăžăă -
ă
Săăć´žçăăŚăăĺ ´ĺăäťťćăŽclass_typeTăăäťťćăŽSTăŤć¸ĄăăăžăăSăSystem.Threading.Lockăăăă¨čŚĺăçşčĄăăăžăă - äťťćăŽclass_type
SăăäťťćăŽinterface_typeTăžă§ăSăĺŽčŁTćäžăăăžăăSăSystem.Threading.Lockăăăă¨čŚĺăçşčĄăăăžăă -
ă
Săăć´žçăăŚăăĺ ´ĺăŻăäťťćăŽinterface_typeTăăäťťćăŽSTăŤć¸Ąăăăžăă - čŚç´ ĺăăăă
SSᾢăăăčŚç´ ĺăćă¤TTᾢăžă§ă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺă-
Să¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăă ă¤ăžăăSă¨TăŽćŹĄĺ ć°ăŻĺăă§ăă -
SᾢăăTᾢă¸ăŽćéťçăŞĺç §ĺ¤ćăĺĺ¨ăăžăă
-
-
S[]ăăSystem.Collections.Generic.IList<T>ă¸ăŽćéťç㪠ID ăžăăŻĺç §ĺ¤ćăăăĺ ´ĺă1 揥ĺ é ĺĺăăSystem.Collections.Generic.IReadOnlyList<T>ăSăăăăłĺşĺşă¤ăłăżăźăă§ă¤ăšăŤTă -
array_typeăă
System.ArrayăăăăłĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšăžă§ă -
delegate_typeăă
System.DelegateăăăăłĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšăžă§ă - ćéťç㪠ID ăžăăŻreference_typeă¸ăŽĺç
§ĺ¤ćăăăă
Tă ă¸ăŽ ID ĺ¤ćăćăŁăŚăăĺ ´ĺăŻăTâăăTâTă¸ă - ă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăĺă¸ăŽäťťćăŽreference_typeăă
Tă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăĺă¸ăŽćéťç㪠ID ăžăăŻĺç §ĺ¤ćTâăăăăTâăăŤĺćŁĺ¤ćĺŻč˝ (T) ă§ăăĺ ´ĺă - ĺç §ĺă¨ĺźă°ăăĺăăŠăĄăźăżăźăĺŤăćéťçăŞĺ¤ćă ĺăăŠăĄăźăżăźăĺŤăćéťçăŞĺ¤ćăŽčŠłç´°ăŤă¤ăăŚăŻă §10.2.12 ăĺç §ăăŚăă ăăă
ćéťçăŞĺç §ĺ¤ćăŻă常ăŤćĺăăăă¨ă訟ćă§ăă reference_typeéăŽĺ¤ćă§ăăăăăĺŽčĄćăŤăă§ăăŻăĺż čŚă¨ăăžăăă
ĺç §ĺ¤ć (ćéťçăžăăŻć示ç) ă§ăŻăĺ¤ćăăăăŞăă¸ă§ăŻăăŽĺç § ID ăŻĺ¤ć´ăăăžăăă
注: ă¤ăžăăĺç §ĺ¤ćă§ăŻĺç §ăŽĺăĺ¤ć´ă§ăăžăăăĺç §ăăăăŞăă¸ă§ăŻăăŽĺăĺ¤ăŻĺ¤ć´ăăăžăăă end note
10.2.9 ăăŻăˇăłă°ăŽĺ¤ć
ăăăŻăšĺĺ¤ćă使ç¨ăăă¨ă value_type ăćéťç㍠reference_typeăŤĺ¤ćă§ăăžăă 揥ăŽăăăŻăšĺĺ¤ćăĺĺ¨ăăžăă
- äťťć㎠value_type ăăĺ
objectă - äťťć㎠value_type ăăĺ
System.ValueTypeă - äťťć㎠enum_type ăăĺ
System.Enumă - äťťćăŽnon_nullable_value_typeăăănon_nullable_value_typeăŤăăŁăŚĺŽčŁ ăăăäťťćăŽinterface_typeăžă§ă
-
non_nullable_value_typeăăĺĽăŽinterface_type
Iă¸ăŽăăăŻăšĺĺ¤ćăăăăăŻă¸ăŽ ID ĺ¤ćăćă¤äťťćăŽIâăăäťťćăŽIâIăŤĺ¤ćăăăžăă -
non_nullable_value_typeăăäťťćăŽinterface_typeăŤ
Inon_nullable_value_typeăăĺĽăŽinterface_typeă¸ăŽăăăŻăšĺĺ¤ćăăăIâăŻĺćŁĺ¤ć (Iâ) ăăăŤĺ¤ćă§ăăžăăI - nullable_value_typeăŽĺşăŤăŞăĺăăreference_typeă¸ăŽăăăŻăšĺĺ¤ćăăăäťťćăŽnullable_value_typeăăäťťćăŽreference_typeă
- §10.2.12 ă§ĺ¤ćă訹ĺŻăăăăăăŤăăŠăŽĺă¸ăŽĺç §ĺă¨ăčŚăŞăăăŞăĺăăŠăĄăźăżăźăăă
non-nullable-value-type ăŽĺ¤ăăăăŻăšĺăŻăăŞăă¸ă§ăŻă ă¤ăłăšăżăłăšăĺ˛ăĺ˝ăŚăăăŽă¤ăłăšăżăłăšăŤĺ¤ăăłăăźăăăă¨ă§ć§ćăăăžăă
nullable_value_typeăŽĺ¤ăăăăŻăšĺăăă¨ănull ĺ¤ (HasValueă false) ăŽĺ ´ĺ㯠null ĺç
§ăçćăăăžăăăă䝼ĺ¤ăŽĺ ´ĺăŻăĺşăŤăŞăĺ¤ăăŠăăč§Łé¤ăăŚăăăŻăšĺăăçľćăçćăăăžăă
注: ăăăŻăšĺăŽăăăťăšăŻăăăšăŚăŽĺ¤ĺăŤĺŻžăăŚăăăŻăšĺăŻăŠăšăĺĺ¨ăăă¨ăăçšă§ćłĺăăăĺ ´ĺăăăăžăă ăă¨ăă°ă
struct Să¨ĺźă°ăăăăăŻăšĺăŻăŠăšă使ç¨ăăŚăă¤ăłăżăźăă§ă¤ăšIăĺŽčŁ ăăS_BoxingăŤă¤ăăŚčăăžăăinterface I { void M(); } struct S : I { public void M() { ... } } sealed class S_Boxing : I { S value; public S_Boxing(S value) { this.value = value; } public void M() { value.M(); } }
vĺăŽĺ¤SăăăăŻăšĺăăăă¨ăŻăĺźnew S_Boxing(v)ăĺŽčĄăăĺ¤ćăŽăżăźă˛ăăĺăŽĺ¤ă¨ăăŚçľćăŽă¤ăłăšăżăłăšăčżăĺŚçă§ć§ćăăăăăăŤăŞăăžăăă ăăăăŁăŚăăšăăźăăĄăłăS s = new S(); object box = s;ăŻă揥ăŽăăăŤčăăăă¨ăă§ăăžăă
S s = new S(); object box = new S_Boxing(s);ä¸ă§čŞŹćăăćłĺăăăăăăŻăšĺăŽç¨ŽéĄăŻăĺŽéăŤăŻĺĺ¨ăăžăăă 䝣ăăăŤă
SĺăŽăăăŻăšĺăăăĺ¤ăŤăŻăŠăłăżă¤ă ĺSăăăăĺłăŞăăŠăłăă¨ăăŚĺ¤ĺăćă¤isćźçŽĺă使ç¨ăăăŠăłăżă¤ă ĺăă§ăăŻă§ăŻă塌ăŞăăŠăłăăĺłăŞăăŠăłăăŽăăăŻăšĺăăăăăźă¸ă§ăłă§ăăăăŠăăăăăšăăăžăă ăă¨ăă°ă ăŤăăžăăint i = 123; object box = i; if (box is int) { Console.Write("Box contains an int"); }ăŻćŹĄăŽăăăŤĺşĺăăžăă
Box contains an intăăăŻăšĺĺ¤ćăŻăăăăŻăšĺăăăŚăăĺ¤ăŽăłăăźăä˝ćăăăă¨ăćĺłăăžăă ăăăŻă reference_type ăăĺ
objectă¸ăŽĺ¤ćă¨ăŻç°ăŞăăĺ¤ăŻĺźăçśăĺăă¤ăłăšăżăłăšăĺç §ăçśăăĺăŤobjectć´žçĺă¨ăŻčŚăŞăăăžăă ăă¨ăă°ă揥ăŽäžă示ăăžăăstruct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } class A { void M() { Point p = new Point(10, 10); object box = p; p.x = 20; Console.Write(((Point)box).x); } }ă§ăŻă
păboxăŤĺ˛ăĺ˝ăŚä¸ăŤçşçăăćéťçăŞăăăŻăšĺćä˝ăŤăăŁăŚpăŽĺ¤ăăłăăźăăăăăăăłăłă˝ăźăŤăŤĺ¤ 10 ăĺşĺăăăžăăPoint䝣ăăăŤclassă¨ăăŚĺŽŁč¨ăăăŚăăĺ ´ĺăpă¨boxăĺăă¤ăłăšăżăłăšăĺç §ăăăăăĺ¤ 20 ăĺşĺăăăžăăăăăŻăšĺăŻăŠăšăŽéĄäźźçšăŻăăăăŻăšĺăŽćŚĺżľçăŞĺä˝ă示ăäžżĺŠăŞăăźăŤă¨ăăŚä˝żç¨ăăŞăă§ăă ăăă ăăŽäťć§ă§čŞŹćăăăŚăăĺä˝ă¨ăăăŽćšćłă§ćŁç˘şăŤĺŽčŁ ăăăăăăŻăšĺăŽçľćă¨ăăŚçăăĺä˝ăŤăŻăĺ¤ăăŽĺžŽĺŚăŞéăăăăăžăă
注é
10.2.10 ćéťçăŞĺçĺ¤ć
ĺçĺăŽĺźăăäťťćăŽĺ Tă¸ăŽćéťçăŞĺçĺ¤ćăĺĺ¨ăăžăă ĺ¤ćăŻĺçăŤăă¤ăłă §12.3.3ăă¤ăžăăĺźăŽĺŽčĄćăŽĺăă Tă¸ăŽćéťçăŞĺ¤ćăĺŽčĄćăŤć¤ç´˘ăăăžăă ĺ¤ćăčŚă¤ăăăŞăĺ ´ĺăŻăĺŽčĄćäžĺ¤ăăšăăźăăăžăă
ăăŽćéťçăŞĺ¤ćăŻă §10.2 ăŽćĺăŽă˘ăăă¤ăšăŤéĺăăŚăăăăăŤčŚăăžăăćéťçăŞĺ¤ćăŤăăŁăŚäžĺ¤ăçşçăăăă¨ăŻăăăžăăă ăă ăăĺ¤ćčŞä˝ă§ăŻăŞăăäžĺ¤ăŽĺĺ ă¨ăŞăĺ¤ć㎠finding ă§ăă ăŠăłăżă¤ă äžĺ¤ăŽăŞăšăŻăŻăĺçăă¤ăłăăŁăłă°ăŽä˝żç¨ăŤĺşćă§ăă ĺ¤ćăŽĺçăă¤ăłăăŁăłă°ăĺż
čŚă§ăŞăĺ ´ĺăŻăĺźăćĺ㍠objectăŤĺ¤ćăăŚăăăçŽçăŽĺăŤĺ¤ćă§ăăžăă
äž: ćéťçăŞĺçĺ¤ćă揥ăŤç¤şăăžăă
object o = "object"; dynamic d = "dynamic"; string s1 = o; // Fails at compile-time â no conversion exists string s2 = d; // Compiles and succeeds at run-time int i = d; // Compiles but fails at run-time â no conversion exists
s2ă¨iă¸ăŽĺ˛ăĺ˝ăŚăŻăŠăĄăăćéťçăŞĺçĺ¤ćă使ç¨ăăžăăăăŽĺ ´ĺăćä˝ăŽăă¤ăłăăŻĺŽčĄćăžă§ä¸ćăăăžăă ĺŽčĄćăŤăd(string) ăŽĺŽčĄćăŽĺăăăżăźă˛ăăĺă¸ăŽćéťçăŞĺ¤ćăćąăăăăžăăstringă¸ăŽĺ¤ćăŻć¤ĺşăăăžăăăintăŤăŻčŚă¤ăăăžăăăend ăŽäž
10.2.11 ćéťçăŞĺŽć°ĺźăŽĺ¤ć
ćéťçăŞĺŽć°ĺźăŽĺ¤ćă§ăŻă揥ăŽĺ¤ćăĺŻč˝ă§ăă
-
ĺăŽconstant_expression (
int) ăŻăconstant_expressionăŽĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ă§ăăă°ăsbyteăbyteăshortăushortăuintănuintăăžăăŻulongăŤĺ¤ćă§ăăžăă -
constant_expressionăŽĺ¤ăč˛ ă§ăŞăĺ ´ĺă
longĺăŽulongăĺăŤĺ¤ćă§ăăžăă
nintĺăŽĺŽć°ăŽçŻĺ˛ăŻintă¨ĺăçŻĺ˛ă§ăăăĺnuintăŽĺŽć°ăŽçŻĺ˛ăŻuint (§12.26) ă¨ĺăçŻĺ˛ă§ăă
注: ăăăŻă
nint/nuintăint/uint(§8.3.6) ă¨ĺăăăžăăŻăăăă大ăăăľă¤ăşăŤăŞăçľćă§ăă 注é
10.2.12 ĺăăŠăĄăźăżăźăĺŤăćéťçăŞĺ¤ć
ĺç
§ĺ (§15.2.5) ă§ăăăă¨ăăăăŁăŚăăTăŤăŻă揥ăŽćéťçăŞĺç
§ĺ¤ć (§10.2.8) ăĺĺ¨ăăžăă
-
TăăćĺšăŞĺşĺşăŻăŠăšCăTăăCăŽäťťćăŽĺşĺşăŻăŠăšăžă§ăTăăCăŤăăŁăŚĺŽčŁ ăăăäťťćăŽă¤ăłăżăźăă§ă¤ăšăžă§ă -
TăăăăŽĺšćçăŞă¤ăłăżăźăă§ă¤ăš ăťăăĺ ăŽITăTăăIăŽäťťćăŽĺşćŹă¤ăłăżăźăă§ă¤ăšăžă§ă -
TăăĺăăŠăĄăźăżăźă¸ăŽUTăUăŤäžĺăăŚăăĺ ´ĺ (§15.2.5)ă注:
TăŻĺç §ĺă§ăăăă¨ăçĽăăăŚăăăăăTăŽăšăłăźăĺ ă§ăŻăUăăłăłăă¤ăŤćăŤĺç §ĺă§ăăăă¨ăĺ¤ćăăŚăăŞăĺ ´ĺă§ăăUăŽĺŽčĄćăŽĺăŻĺ¸¸ăŤĺç §ĺăŤăŞăăžăă 注é - null ăŞăăŠăŤ (§6.4.5.7) ăă T ă¸ă
ĺç
§ĺ§15.2.5T ă¨čŞčăăăŚăăŞătype_parameterăŽĺ ´ĺăTăŤé˘éŁăă揥ăŽĺ¤ćăŻăăłăłăă¤ăŤćăŤăăăŻăšĺĺ¤ć (§10.2.9) ă¨čŚăŞăăăžăă ĺŽčĄćăŤă T ăĺ¤ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺĺ¤ćă¨ăăŚĺŽčĄăăăžăă ĺŽčĄćăŤă T ăĺç
§ĺăŽĺ ´ĺăĺ¤ćăŻćéťçăŞĺç
§ĺ¤ćăžă㯠ID ĺ¤ćă¨ăăŚĺŽčĄăăăžăă
-
TăăćĺšăŞĺşĺşăŻăŠăšCăTăăCăŽäťťćăŽĺşĺşăŻăŠăšăžă§ăTăăCăŤăăŁăŚĺŽčŁ ăăăäťťćăŽă¤ăłăżăźăă§ă¤ăšăžă§ă注:
CăŻăSystem.ObjectăSystem.ValueTypeăăžăăŻSystem.EnumăŽăăăăăŽĺăŤăŞăăžă (ăă䝼ĺ¤ăŽĺ ´ĺăŻăTĺç §ĺă¨ĺźă°ăăžă)ă 注é -
TăăăăŽĺšćçăŞă¤ăłăżăźăă§ă¤ăš ăťăăĺ ăŽITăTăăIăŽäťťćăŽĺşćŹă¤ăłăżăźăă§ă¤ăšăžă§ă
ĺç
§ĺçĽăăăŚăăŞăTăŽĺ ´ĺăTăăĺăăŠăĄăźăżăźă¸ăŽćéťçăŞĺ¤ćUăTăŤäžĺUćäžăăăžăă ĺŽčĄćăŤă T ăĺ¤ĺă§ă U ăĺç
§ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺĺ¤ćă¨ăăŚĺŽčĄăăăžăă ĺŽčĄćăŤă T 㨠U ăŽä¸Ąćšăĺ¤ĺă§ăăĺ ´ĺă T 㨠U ăŻĺż
ăăăĺăĺă§ăăăĺ¤ćăŻĺŽčĄăăăžăăă ĺŽčĄćăŤă T ăĺç
§ĺăŽĺ ´ĺă U ăŻĺż
ăăăĺç
§ĺă§ăăăăĺ¤ćăŻćéťçăŞĺç
§ĺ¤ćăžă㯠ID ĺ¤ć (§15.2.5) ă¨ăăŚĺŽčĄăăăžăă
çšĺŽăŽĺăăŠăĄăźăżăź TăŤĺŻžăăŚăăăăŤćŹĄăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă
-
Tăăĺç §ĺă¸ăŽSăĺç §ĺSâă¸ăŽćéťçăŞĺ¤ćăăăăSâăSă¸ăŽ ID ĺ¤ćăćăŁăŚăăĺ ´ĺă ĺŽčĄćăŤăŻăSâă¸ăŽĺ¤ćă¨ĺăćšćłă§ĺ¤ćăĺŽčĄăăăžăă -
Tăăă¤ăłăżăźăă§ă¤ăšĺă¸ăŽIăă¤ăłăżăźăă§ă¤ăšĺIâă¸ăŽćéťçăŞĺ¤ćăăăăIâăIăŤĺćŁĺ¤ćĺŻč˝ă§ăăĺ ´ĺ (§19.2.3.3)ă ĺŽčĄćăŤăTăĺ¤ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺĺ¤ćă¨ăăŚĺŽčĄăăăžăă ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ćăŻćéťçăŞĺç §ĺ¤ćăžă㯠ID ĺ¤ćă¨ăăŚĺŽčĄăăăžăă
ăăăăŽĺ ´ĺăăĺŽčĄćăŤĺ¤ćăĺ¤ĺăăĺç §ĺăŤĺ¤ćăăăĺ ´ĺăŤăŽăżăĺ¤ćăăăăŻăšĺĺ¤ćă¨ăăŚĺŽčĄăăăăă¨ăăŤăźăŤăŤăăŁăŚäżč¨źăăăžăă
10.2.13 ćéťçăŞăżăăŤĺ¤ć
e形ĺźăŽăżă㍠ăŞăăŠăŤ (eâ, ..., eâ)ăăă寞ĺżăăčŚç´ ĺT = (Tâ, ..., Tâ)ăŤeᾢăăăĺčŚç´ ăŽćéťçăŞĺ¤ćăăăĺ ´ĺăTᾢĺăŽăżăăŤĺ¤ă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă ĺ¤ćăŽçľćăŻă((Tâ)eâ, ..., (Tâ)eâ)ĺăŽăżăăŤĺ¤Tă§ăă
ăżă㍠ăŞăăŠăŤĺ ăŽčŚç´ ĺăăżăăŤĺăŽĺŻžĺżăăčŚç´ ĺă¨ä¸č´ăăŞăĺ ´ĺăŻăčŚĺăçşčĄăăăžăă
ĺT = (Tâ, ..., Tâ)ăă寞ĺżăăS = (Sâ, ..., Sâ)ă¸ăŽćéťçăŞĺ¤ćăăăĺ ´ĺTᾢăăżăăŤĺSᾢăăăżăăŤĺă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă ĺ¤ătăŽăżă㍠(tâ, ..., tâ)ăŤéŠç¨ăăăTĺăŽĺ ´ĺăăăŽĺ¤ćăŽçľćăŻă((Sâ)tâ, ..., (Sâ)tâ)ĺăŽăżăăŤĺ¤SăŤăŞăăžăă
注: ăżăăŤăŞăăŠăŤă§ăŻăŞăăżăăŤĺ¤ăŤĺ¤ćăéŠç¨ăăĺ ´ĺăčŚç´ ĺăä¸č´ăăŞăĺ ´ĺăŻčŚĺăŻĺż čŚăăăžăăă 注é
äž:
(int, string) t1 = (1, "One"); (byte, string) t2 = (2, null); (int, string) t3 = (null, null); // Error: No conversion (int i, string s) t4 = (i: 4, "Four"); (int i, string) t5 = (x: 5, s: "Five"); // Warning: Names are ignoredăżăăŤăŞăăŠăŤčŚç´ ăă寞ĺżăăăżăźă˛ăăĺ¤ć°čŚç´ ĺă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăăăă
t1ăt2ăt4ăăăăłt5ăŽĺŽŁč¨ăŻăăšăŚćĺšă§ăăt3ăănullă¸ăŽĺ¤ćăăŞăăăăintăŽĺŽŁč¨ăŻçĄĺšă§ăă ăżă㍠ăŞăăŠăŤĺ ăŽčŚç´ ĺăăżăăŤĺăŽčŚç´ ĺă¨ç°ăŞăăăăt5ăŽĺŽŁč¨ăŤăăŁăŚčŚĺăçşçăăžăăend ăŽäž
10.2.14 ăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ć
ăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăŻăăŞăăˇă§ăłăŽć¨ćşăŽćéťçăŞĺ¤ćă§ć§ćăăăăăŽĺžăŤăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ććźçŽĺăĺŽčĄăăăăăŽĺžăŤĺĽăŽăŞăăˇă§ăłăŽć¨ćşćéťçăŞĺ¤ćăçśăăžăă ăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăčŠäžĄăăăăăŽćŁç˘şăŞčŚĺăŤă¤ăăŚăŻă §10.5.4ă§čŞŹćăăăŚăăžăă
10.2.15 ĺżĺé˘ć°ăŽĺ¤ćă¨ăĄă˝ăă ă°ăŤăźăĺ¤ć
ĺżĺé˘ć°ă¨ăĄă˝ăă ă°ăŤăźăčŞä˝ăŤĺăŻăăăžăăăăčŞçśĺ (§12.22.8) ăćă¤ăă¨ăă§ăăžăă ăăăăŻćéťçăŤăăŞă˛ăźăĺăŤĺ¤ćăăăĺ ´ĺăăăăžăă ăăăŤăä¸é¨ăŽăŠă ăĺźăŻăĺźăăŞăźĺăŤćéťçăŤĺ¤ćăăăĺ ´ĺăăăăžăă ĺżĺé˘ć°ăŽĺ¤ćăŽčŠłç´°ăŤă¤ăăŚăŻă §10.7 ăă㳠§10.8 ăŽăĄă˝ăă ă°ăŤăźăĺ¤ćă§čŠłăă誏ćăăžăă
10.2.16 ć˘ĺŽăŽăŞăăŠăŤĺ¤ć
default_literal (§12.8.21) ăăäťťćăŽĺă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă ăăŽĺ¤ćăŤăăăć¨čŤăăăĺăŽć˘ĺŽĺ¤ (§9.3) ăçćăăăžăă
10.2.17 ćéťçăŞăšăăźĺ¤ć
throw ĺźăŤăŻĺăŻăăăžăăăăćéťçăŤäťťćăŽĺăŤĺ¤ćă§ăăžăă
10.2.18 ăšă¤ăăĺźăŽĺ¤ć
ĺăćăăŞăswitch_expression (§12.12) ăăăĺswitch_expression_armăŽswitch_expression_arm_expressionăăTă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăăăšăŚăŽĺTă¸ăŽćéťçăŞĺ¤ćăăăăžăă
10.2.19 ćéťçăŞăŞăă¸ă§ăŻăä˝ćĺ¤ć
target_typed_newĺź (§12.8.17.2) ăăăăšăŚăŽĺă¸ăŽćéťçăŞăŞăă¸ă§ăŻăä˝ćĺ¤ćăăăăžăă
ăżăźă˛ăăĺTTSystem.NullableăŽă¤ăłăšăżăłăšă§ăăĺ ´ĺăĺT0ăŻTăŽĺşăŤăŞăĺă§ăă ăă䝼ĺ¤ăŽĺ ´ĺă T0 㯠Tă
ăŤĺ¤ćăăătarget_typed_newĺźăŽćĺłăŻăĺă¨ăăŚTăćĺŽăă寞ĺżăăăŽćĺłă¨ĺăă§ăă
10.2.20 ćéťçăŞćĄäťśĺźăŽĺ¤ć
conditional_expressionc ? e1 : e2ăŽĺ ´ĺ
-
e1ă¨e2ăŤĺ ąéăŽĺăŻăăăžăăă - ĺ
ąéĺăĺĺ¨ăăăă
e1ăžăăŻe2ăŽĺźăŽ 1 ă¤ăŤăăăŽĺă¸ăŽćéťçăŞĺ¤ćăăŞă
ćéťç㪠ćĄäťśĺźĺ¤ć ăĺĺ¨ăăžăăăăŽĺ¤ćăŤăăă conditional_expression ăăäťťćăŽĺă¸ăŽćéťçăŞĺ¤ćă T ĺŻč˝ăŤăŞăăžăăăăŽĺ¤ćăŤăŻă e1 ăă T ă¸ăŽĺ¤ćăăăăł e2 ăă Tă¸ăŽĺ¤ćăĺĺ¨ăăžăă
ă¨e1ăŽéăŤĺ
ąéăŽĺăăŞăăćĄäťśĺźăŽĺ¤ćăŽĺŻžčąĄăŤăŞăŁăŚăăŞăĺ ´ĺăŻăă¨ăŠăźăŤăŞăăžăă
10.2.21 ĺżĺé˘ć°ĺĺ¤ć
ĺżĺé˘ć°ĺ F(§12.22.8) ăă揥ăŽĺ¤ćă訹ĺŻăăăžăă
- ĺżĺé˘ć°ăŽĺăŤ
GFăŽăăŠăĄăźăżăźă¨ćťăĺ¤ăŽĺăăăŠăĄăźăżăźă¨ćťăĺ¤ăŽĺăŤĺćŁĺ¤ćĺŻč˝ăŞGă -
System.DelegateăžăăŻăăŽĺşĺşăŻăŠăšăžăăŻă¤ăłăżăźăă§ă¤ăšă -
System.Linq.Expressions.ExpressionăžăăŻSystem.Linq.Expressions.LambdaExpressionă
ĺżĺé˘ć°ĺ䝼ĺ¤ăŽĺăăĺżĺé˘ć°ĺă¸ăŽĺ¤ćăŻăăăžăăă
System.DelegateăžăăŻăăŽĺşĺşăŻăŠăšăžăăŻă¤ăłăżăźăă§ă¤ăšă¸ăŽĺ¤ćăŻăĺżĺé˘ć°ăžăăŻăĄă˝ăă ă°ăŤăźăăéŠĺăŞăăŞă˛ăźăĺăŽă¤ăłăšăżăłăšă¨ăăŚĺŽçžăăžăă
System.Linq.Expressions.Expression<TDelegate>ăžăăŻăăŽĺşĺşăŻăŠăšă¸ăŽĺ¤ćăŻăĺżĺé˘ć°ăžăăŻăĄă˝ăă ă°ăŤăźăăăéŠĺăŞăăŞă˛ăźăĺăćă¤ĺźăăŞăźă¨ăăŚĺŽçžăăžăă
äž:
Delegate d = delegate (object obj) { }; // Action<object> Expression e = () => ""; // Expression<Func<string>> object o = "".Clone; // Func<object>end ăŽäž
ĺżĺé˘ć°ĺĺ¤ćăŻćéťçăžăăŻć示çăŞć¨ćşĺ¤ćă§ăŻăŞăăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăĺżĺé˘ć°ăžăăŻăĄă˝ăă ă°ăŤăźăăŤéŠç¨ă§ăăăăŠăăăĺ¤ćăăéăŤăŻčć Žăăăžăăă
objectă¸ăŽćéťçăŞĺ¤ćăŻč¨ąĺŻăăăŚăăžăăăćĺłăăŞăĺŻč˝ć§ăăăăăăčŚĺăçşčĄăăăžăă
äž:
Random r = new Random(); object obj; obj = r.NextDouble; // warning: was this intentional? obj = (object)r.NextDouble; // okend ăŽäž
10.2.22 ćéťçăŞăłăŹăŻăˇă§ăłĺźăŽĺ¤ć
ăłăŹăŻăˇă§ăłĺźăă揥ăŽĺă¸ăŽćéťçăŞăłăŹăŻăˇă§ăłĺźĺ¤ćăĺĺ¨ăăžăă
1 揥ĺ é ĺĺ
T[]ăăăŽĺ ´ĺăčŚç´ ĺăŻTăSystem.Span<T>ă¨System.ReadOnlySpan<T>ăăăŽĺ ´ĺăčŚç´ ăŽĺăŻTăéŠĺăŞăłăŹăŻăˇă§ăłä˝ćăĄă˝ăă (§15.17.1) ăćă¤ĺăăăŽĺ ´ĺăčŚç´ ăŽĺăŻăćĄĺźľăĄă˝ăăă§ăŻăŞăă
GetEnumeratoră¤ăłăšăżăłăš ăĄă˝ăăăžăăŻĺćĺŻč˝ăŞă¤ăłăżăźăă§ă¤ăšăăćąşĺŽăăăĺ垊ĺ (§13.9.5) ă§ăăSystem.Collections.IEnumerableăĺŽčŁ ăăć§é ä˝ăžăăŻăŻăŠăšĺăăăŽĺăŤăŻăĺźć°ăŞăă§ĺźăłĺşăăă¨ăă§ăăéŠç¨ĺŻč˝ăŞ (§12.6.4.2) ăłăłăšăăŠăŻăżăźăăăăăłăłăšăăŠăŻăżăźăŻăłăŹăŻăˇă§ăłĺźăŽĺ ´ćăăă˘ăŻăťăšă§ăăžăă
ăłăŹăŻăˇă§ăłĺźăŤčŚç´ ăăăĺ ´ĺăĺăŤăŻă¤ăłăšăżăłăšăžăăŻćĄĺźľăĄă˝ăă
Addăăăăžăă- ăĄă˝ăăăŻăĺä¸ăŽĺ¤ĺźć°ă使ç¨ăăŚĺźăłĺşăăă¨ăă§ăăžăă
- ăĄă˝ăăăă¸ă§ăăŞăăŻăŽĺ ´ĺăĺĺźć°ăŻăłăŹăŻăˇă§ăłă¨ĺźć°ăăć¨čŤă§ăăžăă
- ăăŽăĄă˝ăăăŻăăłăŹăŻăˇă§ăłĺźăŽĺ ´ćăăă˘ăŻăťăšă§ăăžăă
ăăŽĺ ´ĺăčŚç´ ĺăŻĺăŽĺ垊ĺă§ăă
揥ăŽăăăăăŽă¤ăłăżăźăă§ă¤ăšăŽç¨ŽéĄă
System.Collections.Generic.IEnumerable<T>System.Collections.Generic.IReadOnlyCollection<T>System.Collections.Generic.IReadOnlyList<T>System.Collections.Generic.ICollection<T>System.Collections.Generic.IList<T>
ăăŽĺ ´ĺăčŚç´ ăŽĺăŻ
T
ćéťçăŞĺ¤ćăŻăĺăŤčŚç´ ĺ U ăăłăŹăŻăˇă§ăłĺźĺ
ăŽĺčŚç´ Eᾢ ĺ ´ĺăŤĺĺ¨ăăžăă
-
Eᾢăexpression_elementăŽĺ ´ĺăEᾢăăUă¸ăŽćéťçăŞĺ¤ćăăăăžăă -
Eᾢăspread_element..SᾢăŽĺ ´ĺăSᾢăŽĺ垊ĺăăUă¸ăŽćéťçăŞĺ¤ćăăăăžăă
ăłăŹăŻăˇă§ăłĺźăăĺ¤ćŹĄĺ é ĺĺă¸ăŽăłăŹăŻăˇă§ăłĺźĺ¤ćăŻăăăžăăă
ăłăŹăŻăˇă§ăłĺźăăăŽćéťçăŞăłăŹăŻăˇă§ăłĺźĺ¤ćăăăĺăŻăăăŽăłăŹăŻăˇă§ăłĺźăŽćĺšăŞăżăźă˛ăăĺă§ăă
ăłăŹăŻăˇă§ăłĺźăăă揥ăŽčż˝ĺ ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă
null 訹厚ĺ¤ĺăŤ
T?ăłăŹăŻăˇă§ăłĺźăăĺ¤ĺă¸ăŽăłăŹăŻăˇă§ăłĺźăŽĺ¤ćăTă ăăŽĺ¤ćăŻăTă¸ăŽăłăŹăŻăˇă§ăłĺźĺ¤ćăŽĺžăŤăTăăT?ă¸ăŽćéťç㪠null 訹厚ĺ¤ćă§ăăUĺăčżăTăŤé˘éŁäťăăăăăłăŹăŻăˇă§ăłä˝ćăĄă˝ăăăăăăUăăTă¸ăŽćéťçăŞĺç §ĺ¤ćăăăĺç §ĺTă ăăŽĺ¤ćăŻăUă¸ăŽăłăŹăŻăˇă§ăłĺźĺ¤ćăŽĺžăŤăUăăTă¸ăŽćéťçăŞĺç §ĺ¤ćă§ăăVĺăčżăIăŤé˘éŁäťăăăăăłăŹăŻăˇă§ăłä˝ćăĄă˝ăăăăăăVăăIă¸ăŽćéťçăŞăăăŻăšĺĺ¤ćăăăă¤ăłăżăźăă§ă¤ăšĺIă ăăŽĺ¤ćăŻăăłăŹăŻăˇă§ăłĺźăăVă¸ăŽĺ¤ćăŽĺžăŤăVăăIă¸ăŽćéťçăŞăăăŻăšĺĺ¤ćă§ăă
ăłăŹăŻăˇă§ăłĺźă ref ć§é ä˝ĺăŤĺ¤ćăăă¨ăăăšăŚăŽ ref ĺŽĺ ¨ć§čŚäťś (§9.7.2ă §16.8.15) ăćşăăăăžăă
10.2.23 ćéťçăŞă¤ăłăŠă¤ăłé ĺĺ¤ć
ćéťçăŞă¤ăłăŠă¤ăłé ĺ (§16.6) ĺ¤ćăŻćŹĄăŽă¨ăăă§ăă
- čŚç´ ĺă
Tăăăć¸ăčžźăżĺŻč˝ăŞă¤ăłăŠă¤ăłé ĺăćĺŽăăĺźăăSystem.Span<T> - čŚç´ ĺă
Tăăăć¸ăčžźăżĺŻč˝ăŞă¤ăłăŠă¤ăłé ĺăćĺŽăăĺźăăSystem.ReadonlySpan<T> - čŚç´ ĺă
TăăăčŞăżĺăĺ°ç¨ă¤ăłăŠă¤ăłé ĺăćĺŽăăĺźăăSystem.ReadonlySpan<T>
ă¤ăłăŠă¤ăłé
ĺă System.Span ăžă㯠System.ReadonlySpan ăŤĺ¤ćăăă¨ăă¤ăłăŠă¤ăłé
ĺĺă§ĺŽŁč¨ăăăćźçŽĺăçĄčŚăăăăă䝼ĺ¤ăŽĺ ´ĺăŻčОĺ˝ăăĺŻč˝ć§ăăăăžăă 芳細ăŤă¤ăăŚăŻ ă§16.6 ăĺç
§ăăŚăă ăăă
10.3 ć示çăŞĺ¤ć
10.3.1 ĺ ¨čŹ
揥ăŽĺ¤ćăŻăć示çăŞĺ¤ćă¨ăăŚĺéĄăăăžăă
- ăăšăŚăŽćéťçăŞĺ¤ć (§10.2)
- ć示çăŞć°ĺ¤ĺ¤ć (§10.3.2)
- ć示çăŞĺćĺ¤ć (§10.3.3)
- ć示ç㪠null 訹厚ĺ¤ć (§10.3.4)
- ć示çăŞăżăăŤĺ¤ć (§10.3.6)
- ć示çăŞĺç §ĺ¤ć (§10.3.5)
- ć示çăŞă¤ăłăżăźăă§ă¤ăšĺ¤ć (§10.3.5)
- ĺ¤ćăŽăăăŻăšĺč§Łé¤ (§10.3.7)
- ć示çăŞĺăăŠăĄăźăżăźĺ¤ć (§10.3.8)
- ăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ć (§10.3.9)
ć示çăŞĺ¤ćăŻăăăŁăšăĺź (§12.9.8) ă§čĄăăă¨ăă§ăăžăă
ć示çăŞĺ¤ćăŽăťăăăŤăŻăăăšăŚăŽćéťçăŞĺ¤ćăĺŤăžăăžăă
注: ăă¨ăă°ăçšĺŽăŽăĄă˝ăă ăŞăźăăźăăźăă埡ĺśçăŤé¸ćăăăăăŤăćéťç㪠ID ĺ¤ćăĺĺ¨ăăĺ ´ĺăŤć示çăŞăăŁăšăă使ç¨ă§ăăžăă 注é
ćéťçăŞĺ¤ćă§ăŻăŞăć示çăŞĺ¤ćăŻă常ăŤćĺăăăă¨ă訟ćă§ăăŞăĺ¤ćăć ĺ ąă夹ăăăĺŻč˝ć§ăçĽăăăŚăăĺ¤ćăăăăłĺăŽăăĄă¤ăłéăŽĺ¤ćăŻăć示çăŞčĄ¨č¨ćłăŤčŚĺăăŽăŤĺĺăŤç°ăŞăăžăă
10.3.2 ć示çăŞć°ĺ¤ĺ¤ć
ć示çăŞć°ĺ¤ĺ¤ćă¨ăŻăćéťçăŞć°ĺ¤ĺ¤ć (§10.2.3) ăăžă ĺĺ¨ăăŞănumeric_typeăăĺĽăŽnumeric_typeă¸ăŽĺ¤ćă§ăă
-
sbyteăăbyteăushortăuintăulongănuintăăžăăŻcharăžă§ă -
byteăăsbyteăžăăŻcharăžă§ă -
shortăăsbyteăbyteăushortăuintănuintăulongăăžăăŻcharăžă§ă -
ushortăăsbyteăbyteăshortăăžăăŻcharăžă§ă -
intăăsbyteăbyteăshortăushortăuintănuintăulongăăžăăŻcharăžă§ă -
uintăăsbyteăbyteăshortăushortăintănintăăžăăŻcharăžă§ă -
nintăăsbyteăbyteăshortăushortăintăuintănuintăulongăăžăăŻcharăžă§ă -
nuintăăsbyteăbyteăshortăushortăintăuintănintălongăăžăăŻcharăžă§ă -
longăăsbyteăbyteăshortăushortăintăuintănintănuintăulongăăžăăŻcharăžă§ă -
ulongăăsbyteăbyteăshortăushortăintăuintănintănuintălongăăžăăŻcharăžă§ă -
charăăsbyteăbyteăăžăăŻshortăžă§ă -
floatăăsbyteăbyteăshortăushortăintăuintănintănuintălongăulongăcharăăžăăŻdecimalăžă§ă -
doubleăăăsbyteăbyteăshortăushortăintăuintănintănuintălongăulongăcharăfloatăăžăăŻdecimalăžă§ă -
decimalăăăsbyteăbyteăshortăushortăintăuintănintănuintălongăulongăcharăfloatăăžăăŻdoubleăžă§ă
ć示çăŞĺ¤ćăŤăŻăăšăŚăŽćéťçăŞć°ĺ¤ĺ¤ćă¨ć示çăŞć°ĺ¤ĺ¤ćăĺŤăžăăŚăăăăăăăŁăšăĺź (§12.9.8) ă使ç¨ăăŚăäťťćăŽnumeric_typeăăäťăŽnumeric_typeăŤĺ¸¸ăŤĺ¤ćă§ăăžăă
ć示çăŞć°ĺ¤ĺ¤ćă§ăŻăć ĺ ąă夹ăăăăăäžĺ¤ăăšăăźăăăĺŻč˝ć§ăăăăžăă ć示çăŞć°ĺ¤ĺ¤ćăŻă揥ăŽăăăŤĺŚçăăăžăă
- ć´ć°ĺăăĺĽăŽć´ć°ĺă¸ăŽĺ¤ćăŽĺ ´ĺăĺŚçăŻăĺ¤ćăčĄăăăăŞăźăăźăăăź ăă§ă㯠ăłăłăăăšă (§12.8.20) ăŤäžĺăăžăă
-
checkedăłăłăăăšăă§ăŻăă˝ăźăš ăŞăăŠăłăăŽĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ăŤăăĺ ´ĺăŻĺ¤ćăŻćĺăăžăăăă˝ăźăš ăŞăăŠăłăăŽĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ¤ăŽĺ ´ĺăŻSystem.OverflowExceptionăăšăăźăăžăă -
uncheckedăłăłăăăšăă§ăŻăĺ¤ćăŻĺ¸¸ăŤćĺăă揥ăŽăăăŤé˛ăżăžăă- ă˝ăźăšăŽç¨ŽéĄăĺ¤ćĺ ăŽĺăăă大ăăĺ ´ĺăŻăă㎠"ä˝ĺăŞ" ćä¸ä˝ăăăăç ´ćŁăăăă¨ă§ăă˝ăźăšĺ¤ăĺăć¨ăŚăăăžăă çľćăŻĺ¤ćĺ ăŽĺăŽĺ¤ă¨ăăŚćąăăăžăă
- ă˝ăźăšăŽç¨ŽéĄăăłăăźĺ ăŽĺă¨ĺăăľă¤ăşăŽĺ ´ĺăă˝ăźăšĺ¤ăŻĺ¤ćĺ ăŽĺăŽĺ¤ă¨ăăŚćąăăăžă
-
-
decimalăăć´ć°ĺă¸ăŽĺ¤ćăŽĺ ´ĺăă˝ăźăšĺ¤ăŻ 0 ăăćăčżăć´ć°ĺ¤ăŤä¸¸ăăăăăăŽć´ć°ĺ¤ăŻĺ¤ćăŽçľćăŤăŞăăžăă çľćăŽć´ć°ĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ¤ăŽĺ ´ĺăŻăSystem.OverflowExceptionăăšăăźăăăžăă -
floatăžăăŻdoubleăăć´ć°ĺă¸ăŽĺ¤ćăŽĺ ´ĺăĺŚçăŻăĺ¤ćăčĄăăăăŞăźăăźăăăź ăă§ă㯠ăłăłăăăšă (§12.8.20) ăŤäžĺăăžăă- ăă§ăăŻăăăăłăłăăăšăă§ăŻăĺ¤ćăŻćŹĄăŽăăăŤé˛ăżăžăă
- ăŞăăŠăłăăŽĺ¤ă NaN ăžăăŻçĄéăŽĺ ´ĺăŻă
System.OverflowExceptionăăšăăźăăăžăă - ăă䝼ĺ¤ăŽĺ ´ĺăă˝ăźăš ăŞăăŠăłă㯠0 ăŤĺăăŁăŚćăčżăć´ć°ĺ¤ăŤä¸¸ăăăăžăă ăăŽć´ć°ĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ăŤăăĺ ´ĺăăăŽĺ¤ăŻĺ¤ćăŽçľćăŤăŞăăžăă
- ăă䝼ĺ¤ăŽĺ ´ĺăŻă
System.OverflowExceptionăăšăăźăăăžăă
- ăŞăăŠăłăăŽĺ¤ă NaN ăžăăŻçĄéăŽĺ ´ĺăŻă
- ăă§ăăŻăăăŚăăŞăăłăłăăăšăă§ăŻăĺ¤ćăŻĺ¸¸ăŤćĺăă揥ăŽăăăŤé˛ăżăžăă
- ăŞăăŠăłăăŽĺ¤ă NaN ăžăăŻçĄéăŽĺ ´ĺăĺ¤ćăŽçľćăŻĺ¤ćĺ ăŽĺăŽćĺŽăăăŚăăŞăĺ¤ăŤăŞăăžăă
- ăă䝼ĺ¤ăŽĺ ´ĺăă˝ăźăš ăŞăăŠăłă㯠0 ăŤĺăăŁăŚćăčżăć´ć°ĺ¤ăŤä¸¸ăăăăžăă ăăŽć´ć°ĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ăŤăăĺ ´ĺăăăŽĺ¤ăŻĺ¤ćăŽçľćăŤăŞăăžăă
- ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ćăŽçľćăŻĺ¤ćĺ ăŽĺăŽćŞćĺŽăŽĺ¤ăŤăŞăăžăă
- ăă§ăăŻăăăăłăłăăăšăă§ăŻăĺ¤ćăŻćŹĄăŽăăăŤé˛ăżăžăă
-
doubleăăfloată¸ăŽĺ¤ćă§ăŻădoubleĺ¤ăŻćăčżăfloatĺ¤ăŤä¸¸ăăăăžăădoubleĺ¤ăĺ°ăăăăŚfloată¨ăăŚčĄ¨ăă¨ăçľćăŻĺ¤ă¨ĺă珌ĺˇăćă¤ăźăăŤăŞăăžăădoubleĺ¤ăŽĺ¤§ăăă大ăăăăŚfloată¨ăăŚčĄ¨ăă¨ăçľćăŻĺ¤ă¨ĺă珌ĺˇă§çĄé大ăŤăŞăăžăădoubleĺ¤ă NaN ăŽĺ ´ĺăçľćă NaN ăŤăŞăăžăă -
floatăžăăŻdoubleăădecimală¸ăŽĺ¤ćăŽĺ ´ĺăă˝ăźăšĺ¤ăŻdecimal襨çžăŤĺ¤ćăăăĺż čŚăŤĺżăăŚćăčżăć°ĺ¤ăŤä¸¸ăăăăžă (§8.3.8)ă- ă˝ăźăšĺ¤ăĺ°ăăăăŚ
decimală¨ăăŚčĄ¨ăăŤăŻăçľć㯠0 ăŤăŞăădecimală珌ĺˇäťăăźăĺ¤ăăľăăźăăăŚăăĺ ´ĺăĺ ăŽĺ¤ăŽçŹŚĺˇăŻäżćăăăžăă - ă˝ăźăšĺ¤ăŽĺ¤§ăăă大ăăăăŚ
decimală¨ăăŚčĄ¨çžă§ăăŞăĺ ´ĺăăžăăŻăăŽĺ¤ăçĄé大ă§ăăĺ ´ĺă10 é˛čĄ¨çžă§çĄé大ăăľăăźăăăăŚăăĺ ´ĺăçľćăŻĺ ăŽĺ¤ăŽçŹŚĺˇăäżćăăçĄé大ăŤăŞăăžăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSystem.OverflowException ăăšăăźăăăžăă - ă˝ăźăšĺ¤ă NaN ăŽĺ ´ĺă10 é˛čĄ¨çžă§ NaN ăăľăăźăăăăŚăăĺ ´ĺăçľć㯠NaN ăŤăŞăăžăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSystem.OverflowException ăăšăăźăăăžăă
- ă˝ăźăšĺ¤ăĺ°ăăăăŚ
-
decimalăăfloatăžăăŻdoubleă¸ăŽĺ¤ćă§ăŻădecimalĺ¤ăŻćăčżădoubleăžăăŻfloatĺ¤ăŤä¸¸ăăăăžăă ă˝ăźăšĺ¤ăŽĺ¤§ăăă大ăăăăŚăżăźă˛ăăĺă§čĄ¨çžă§ăăŞăĺ ´ĺăăžăăŻăăŽĺ¤ăçĄé大ăŽĺ ´ĺăçľćăŻĺ ăŽĺ¤ăŽçŹŚĺˇăäżćăăçĄé大ăŤăŞăăžăă ă˝ăźăšĺ¤ă NaN ăŽĺ ´ĺăçľć㯠NaN ăŤăŞăăžăă ăăŽĺ¤ćă§ăŻç˛žĺşŚă夹ăăăĺŻč˝ć§ăăăăžăăăă ăăäžĺ¤ăăšăăźăăăăă¨ăŻăăăžăăă
注:
decimalĺăŻçĄé大ăžă㯠NaN ĺ¤ăăľăăźăăăăăăŤĺż čŚăăăžăăăăăăŽĺ ´ĺăăăăžăăăăŽçŻĺ˛ăŻăfloată¨doubleăŽçŻĺ˛ăăăĺ°ăăĺ ´ĺăăăăžăăăäżč¨źăăăžăăă çĄé大ăžă㯠NaN ĺ¤ăŽăŞădecimal襨çžă§ăçŻĺ˛ăfloatăăĺ°ăăĺ ´ĺădecimalăăfloatăžăăŻdoubleă¸ăŽĺ¤ćăŽçľćăŻçĄé大ăžă㯠NaN ăŤăŞăăă¨ăŻăăăžăăă 注é
10.3.3 ć示çăŞĺćĺ¤ć
ć示çăŞĺćĺ¤ćăŻćŹĄăŽă¨ăăă§ăă
-
sbyteăbyteăshortăushortăintăuintănintănuintălongăulongăcharăfloatădoubleădecimalăăäťťćăŽenum_typeăžă§ă -
äťťćăŽenum_typeăăă
sbyteăbyteăshortăushortăintăuintănintănuintălongăulongăcharăfloatădoubleăăžăăŻdecimalăžă§ă - äťťć㎠enum_type ăăäťăŽ enum_typeăžă§ă
2 ă¤ăŽĺéăŽć示çăŞĺćĺ¤ćăŻăĺĺ ăăŚăă enum_type ăă㎠enum_typeăŽĺşăŤăŞăĺă¨ăăŚćąăăçľćăŽĺéă§ćéťçăžăăŻć示çăŞć°ĺ¤ĺ¤ćăĺŽčĄăăăă¨ăŤăăŁăŚĺŚçăăăžăă
äž: ĺşĺşĺă ă§ăă
EintăŽĺ ´ĺăEăăbyteă¸ăŽĺ¤ćăŻă ăăintă¸ăŽć示çăŞć°ĺ¤ĺ¤ć (byte) ă¨ăăŚĺŚçăăăbyteăăEă¸ăŽĺ¤ćăŻă ăăbyteă¸ăŽćéťăŽć°ĺ¤ĺ¤ć (int) ă¨ăăŚĺŚçăăăžăă end ăŽäž
10.3.4 ć示ç㪠null 訹厚ĺ¤ć
ć示ç㪠null 訹厚ĺ¤ćăŻăć示çăăăłćéťçăŞĺŽçžŠć¸ăżĺ¤ćăăć´žçăă null 訹厚ĺ¤ć (§10.6.1) ă§ăă
10.3.5 ć示çăŞĺç §ĺ¤ć
ć示çăŞĺç §ĺ¤ćăŻćŹĄăŽă¨ăăă§ăă
- ăŞăă¸ă§ăŻăăăäťăŽ reference_typeă¸ă
-
class_type
SăăäťťćăŽclass_typeTăžă§ăSăŻTăŽĺşĺşăŻăŠăšă§ăă -
class_type
SăăäťťćăŽinterface_typeTăžă§ăSăăˇăźăŤăăăŚăăăăSăĺŽčŁ ăăŚăăŞăTćĺŽăăăŚăăĺ ´ĺă -
interface_type
SăăäťťćăŽclass_typeTăžă§ăTăăˇăźăŤăăăŚăăŞăăăTăĺŽčŁSćäžăăăŞăĺ ´ĺă -
ă
Săăć´žçăăŚăăŞăĺ ´ĺăäťťćăŽinterface_typeTăăäťťćăŽSTăŤć¸Ąăăăžăă - čŚç´ ĺăăăă
SSᾢăăăčŚç´ ĺăćă¤TTᾢăžă§ă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺă-
Să¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăă ă¤ăžăăSă¨TăŽćŹĄĺ ć°ăŻĺăă§ăă - ć示çăŞĺç
§ĺ¤ćăŻă
SᾢăăTᾢăŤĺĺ¨ăăžăă
-
-
System.Arrayă¨ĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšăăăäťťćăŽarray_typeăŤă -
ăă
S[]ă¸ăŽ ID ĺ¤ćăžăăŻć示çăŞĺç §ĺ¤ćăăăĺ ´ĺăŻă1 揥ĺ ăŽSystem.Collections.Generic.IList<T>System.Collections.Generic.IReadOnlyList<T>ăăSăTăăăăłăăŽĺşćŹă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćăăžăă -
System.Collections.Generic.IList<S>ăă T ă¸ăŽ ID ĺ¤ćăžăăŻć示çăŞĺç §ĺ¤ćăăăĺ ´ĺăSystem.Collections.Generic.IReadOnlyList<S>ăT[]ăăăăłăăŽĺşćŹă¤ăłăżăźăă§ă¤ăšăă 1 揥ĺ é ĺĺăŽSă -
System.Delegateă¨ăăăĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšăăäťťćăŽdelegate_typeăŤă - ĺç
§ĺ
Săăĺç §ĺă¸ăŽTSăăĺç §ĺă¸ăŽć示çăŞĺ¤ćăăăăTâăăăłTâăăăăTâăăTă¸ăŽ ID ĺ¤ćăăăĺ ´ĺă -
Săăă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăĺă¸ăŽć示çăŞĺç §ĺ¤ćăăăăTăSăŤĺćŁĺ¤ćĺŻč˝ă§ăăăăTâăTâTăŤĺćŁĺ¤ćĺŻč˝ă§ăăĺ ´ĺăĺç §ĺTăăă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăTâĺă¸ăŽă -
D<Sâ...Sᾼ>ăăăD<Tâ...Tᾼ>ăă¸ă§ăăŞă㯠ăăŞă˛ăźăĺă§ăăD<Xâ...Xᾼ>ăžă§ăD<Sâ...Sᾼ>ăŻD<Tâ...Tᾼ>ă¨äşćć§ăĺăă§ăŞăăXᾢăŽĺăăŠăĄăźăżăźDăă¨ăŤćŹĄăŽĺ 厚ăäżćăăăžăă-
Xᾢăä¸ĺ¤ăŽĺ ´ĺăSᾢăŻTᾢă¨ĺăă§ăă -
Xáľ˘ĺ ąĺ¤ăŽĺ ´ĺăID ĺ¤ćăćéťçăŞĺç §ĺ¤ćăăžăăŻSᾢăăTᾢă¸ăŽć示çăŞĺç §ĺ¤ćăăăăžăă -
Xᾢăĺĺ¤ăŽĺ ´ĺăSᾢă¨TᾢăŻĺä¸ăžăăŻä¸ĄćšăŽĺç §ĺăŤăŞăăžăă
-
- ĺç §ĺă¨ĺźă°ăăĺăăŠăĄăźăżăźăĺŤăć示çăŞĺ¤ćă ĺăăŠăĄăźăżăźăŤé˘éŁăăć示çăŞĺ¤ćăŽčŠłç´°ăŤă¤ăăŚăŻă §10.3.8 ăĺç §ăăŚăă ăăă
ć示çăŞĺç §ĺ¤ćăŻă reference_typeéăŽĺ¤ćă§ăăăăăăăćŁăăăă¨ă確čŞăăăăăŤĺŽčĄćăă§ăăŻăĺż čŚă§ăă
ĺŽčĄćăŤć示çăŞĺç
§ĺ¤ćăćĺăăăŤăŻăă˝ăźăš ăŞăăŠăłăăŽĺ¤ă nullăăăăă˝ăźăš ăŞăăŠăłăăŤăăŁăŚĺç
§ăăăăŞăă¸ă§ăŻăăŽĺăćéťçăŞĺç
§ĺ¤ć (§10.2.8 ăŤăăŁăŚĺ¤ćĺ
ăŽĺăŤĺ¤ćă§ăăĺăŤăăĺż
čŚăăăăžăă ć示çăŞĺç
§ĺ¤ćă夹ćăăă¨ă System.InvalidCastException ăăšăăźăăăžăă
注: ĺç §ĺ¤ćăŻćéťçăžăăŻć示çă§ăăăĺç §čŞä˝ăŽĺ¤ (§8.2.1) ăŻĺ¤ć´ăăăžăăăĺç §ăăăăŞăă¸ă§ăŻăăŽĺăžăăŻĺ¤ăŻĺ¤ć´ăăăžăăă 注é
10.3.6 ć示çăŞăżăăŤĺ¤ć
ăăŠăźă eăŽăżă㍠ăŞăăŠăŤ (eâ, ..., eâ)ăăă寞ĺżăăčŚç´ ĺT = (Tâ, ..., Tâ)ăŤeᾢĺčŚç´ ăŤć示çăŞĺ¤ćăăăĺ ´ĺTᾢĺăŽăżăăŤĺ¤ă¸ăŽć示çăŞĺ¤ćăĺĺ¨ăăžăă ĺ¤ćăŽçľćăŻă((Tâ)eâ, ..., (Tâ)eâ)ĺăŽăżăăŤĺ¤Tă§ăă
ăżă㍠ăŞăăŠăŤĺ ăŽčŚç´ ĺăăżăăŤĺăŽĺŻžĺżăăčŚç´ ĺă¨ä¸č´ăăŞăĺ ´ĺăŻăčŚĺăçşčĄăăăžăă
ĺT = (Tâ, ..., Tâ)ăă寞ĺżăăS = (Sâ, ..., Sâ)ă¸ăŽć示çăŞĺ¤ćăăăĺ ´ĺTᾢăăżăăŤĺSᾢăăăżăăŤĺă¸ăŽć示çăŞĺ¤ćăĺĺ¨ăăžăă
(tâ, ..., tâ)ĺăŽăżăăŤĺ¤TăŤéŠç¨ăăăĺ ´ĺăŽăăŽĺ¤ćăŽçľćăŻă((Sâ)tâ, ..., (Sâ)tâ)ĺăŽăżăăŤĺ¤Să§ăă
注: ăżăăŤăŞăăŠăŤă§ăŻăŞăăżăăŤĺ¤ăŤĺ¤ćăéŠç¨ăăĺ ´ĺăčŚç´ ĺăä¸č´ăăŞăĺ ´ĺăŻčŚĺăŻĺż čŚăăăžăăă 注é
10.3.7 ĺ¤ćăŽăăăŻăšĺč§Łé¤
ăăăŻăšĺč§Łé¤ĺ¤ćă使ç¨ăăă¨ă reference_type ăć示ç㍠value_typeăŤĺ¤ćă§ăăžăă 揥ăŽăăăŻăšĺč§Łé¤ĺ¤ćăĺĺ¨ăăžăă
- ĺăăäťťćăŽ
objectăŤă - ĺăăäťťćăŽ
System.ValueTypeăŤă - ĺăăäťťćăŽ
System.EnumăŤă - äťťćăŽinterface_typeăăăinterface_typeăĺŽčŁ ăăäťťćăŽnon_nullable_value_typeăžă§ă
- äťťćăŽinterface_type
Iăăăinterface_typeăăIâăăIă¸ăŽ ID ĺ¤ćăăăäťťćăŽIâă -
äťťćăŽinterface_typeăă
Inon_nullable_value_type interface_typeăănon_nullable_value_typeă¸ăŽăăăŻăšĺč§Łé¤ĺ¤ćăăăIâăIâăŤvariance_convertibleăăăăăIăIăŤĺćŁĺ¤ćĺŻč˝ă§ăă (Iâ)ă - reference_typeăăăreference_typeăănullable_value_typeăŽĺşăŤăŞănon_nullable_value_typeă¸ăŽăăăŻăšĺč§Łé¤ĺ¤ćăăăäťťćăŽnullable_value_typeă
- §10.3.8 ă§ĺ¤ćă訹ĺŻăăăăăăŤăĺ¤ĺă¨ăăŚčŞčăăăŚăăŞăĺăăŠăĄăźăżăźăăäťťćăŽĺăŤă
non_nullable_value_typeăŤĺŻžăăăăăŻăšĺč§Łé¤ćä˝ăŻăćĺăŤăŞăă¸ă§ăŻă ă¤ăłăšăżăłăšăćĺŽăăănon_nullable_value_typeăŽăăăŻăšĺăăăĺ¤ă§ăăăă¨ă確čŞăăŚăăăă¤ăłăšăżăłăšăăĺ¤ăăłăăźăăăă¨ă§ć§ćăăăžăă
nullable_value_typeă¸ăŽăăăŻăšĺăč§Łé¤ăăă¨ăă˝ăźăš ăŞăăŠăłăăăăăŚăăĺ ´ĺăŻnull㎠null ĺ¤ăçćăăăăă䝼ĺ¤ăŽĺ ´ĺăŻăŞăă¸ă§ăŻă ă¤ăłăšăżăłăšăŽăăăŻăšĺăč§Łé¤ăăçľćnullable_value_typeăă䝼ĺ¤ăŽĺ ´ĺăŻçćăăăžăă
注: §10.2.9 ă§čŞŹćăăăŚăăćśçŠşăŽăăăŻăšĺăŻăŠăšăĺç §ăăă¨ăăŞăă¸ă§ăŻă ăăăŻăšăă value_type
Să¸ăŽăăăŻăšĺč§Łé¤ĺ¤ćăŻăĺź((S_Boxing)box).valueăŽĺŽčĄă§ć§ćăăăžăă ăăăăŁăŚăăšăăźăăĄăłăobject box = new S(); S s = (S)box;ćŚĺżľçăŤăŻćŹĄăŤĺŻžĺżăăžăă
object box = new S_Boxing(new S()); S s = ((S_Boxing)box).value;注é
çšĺŽăŽ non_nullable_value_type ă¸ăŽăăăŻăšĺč§Łé¤ĺ¤ćăĺŽčĄćăŤćĺăăăŤăŻăă˝ăźăš ăŞăăŠăłăăŽĺ¤ăŻăă㎠non_nullable_value_typeăŽăăăŻăšĺăăăĺ¤ă¸ăŽĺç
§ă§ăăĺż
čŚăăăăžăă ă˝ăźăš ăŞăăŠăłăă null ĺ ´ĺăŻă System.NullReferenceException ăăšăăźăăăžăă ă˝ăźăš ăŞăăŠăłăăäşćć§ăŽăŞăăŞăă¸ă§ăŻăă¸ăŽĺç
§ă§ăăĺ ´ĺăŻă System.InvalidCastException ăăšăăźăăăžăă
çšĺŽăŽnullable_value_typeă¸ăŽăăăŻăšĺč§Łé¤ĺ¤ćăĺŽčĄćăŤćĺăăăŤăŻăă˝ăźăš ăŞăăŠăłăăŽĺ¤ă null ă§ăăăănullable_value_typeăŽĺşăŤăŞănon_nullable_value_typeăŽăăăŻăšĺăăăĺ¤ă¸ăŽĺç
§ă§ăăĺż
čŚăăăăžăă ă˝ăźăš ăŞăăŠăłăăäşćć§ăŽăŞăăŞăă¸ă§ăŻăă¸ăŽĺç
§ă§ăăĺ ´ĺăŻă System.InvalidCastException ăăšăăźăăăžăă
10.3.8 ĺăăŠăĄăźăżăźăĺŤăć示çăŞĺ¤ć
ĺç
§ĺ (§15.2.5) ă§ăăăă¨ăăăăŁăŚăăTăŤăŻă揥ăŽć示çăŞĺç
§ĺ¤ć (§10.3.5) ăĺĺ¨ăăžăă
-
CăŽćĺšăŞĺşĺşăŻăŠăšTăăTăžă§ăCăŽäťťćăŽĺşĺşăŻăŠăšăăTăžă§ă - äťťć㎠interface_type ăă
Tă -
TăăäťťćăŽinterface_typeăŤITăăIă¸ăŽćéťçăŞĺç §ĺ¤ćăăžă ĺĺ¨ăăŞăĺ ´ĺă -
ă
U(T) ăŤäžĺăăŚăăĺ ´ĺăTUăăă注:
TăŻĺç §ĺă§ăăăă¨ăçĽăăăŚăăăăăTăŽăšăłăźăĺ ă§ăŻăăłăłăă¤ăŤćăŤUăĺç §ĺă§ăăăă¨ăĺ¤ćăăŚăăŞăĺ ´ĺă§ăăĺŽčĄćăŽĺăŻĺ¸¸ăŤĺç §ĺăŤăŞăăžăă 注é
ĺç
§ĺ (T) ă¨ĺźă°ăătype_parameterăŽĺ ´ĺăTăŤé˘éŁăă揥ăŽĺ¤ćăŻăăłăłăă¤ăŤćăŤĺ¤ćăŽăăăŻăšĺč§Łé¤ (§10.3.7) ă¨čŚăŞăăăžăă ĺŽčĄćăŤă T ăĺ¤ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺč§Łé¤ĺ¤ćă¨ăăŚĺŽčĄăăăžăă ĺŽčĄćăŤă T ăĺç
§ĺăŽĺ ´ĺăĺ¤ćăŻć示çăŞĺç
§ĺ¤ćăžă㯠ID ĺ¤ćă¨ăăŚĺŽčĄăăăžăă
-
CăŽćĺšăŞĺşĺşăŻăŠăšTăăTăžă§ăCăŽäťťćăŽĺşĺşăŻăŠăšăăTăžă§ă注: C ăŻă
System.ObjectăSystem.ValueTypeăăžăăŻSystem.EnumăŽăăăăăŽĺăŤăŞăăžă (ăă䝼ĺ¤ăŽĺ ´ĺăŻăTĺç §ĺă¨ĺźă°ăăžă)ă 注é - äťťć㎠interface_type ăă
Tă
ĺç
§ĺ (§15.2.5) ă§ăăăă¨ăTçĽăăăŚăăŞătype_parameterăŽĺ ´ĺă揥ăŽć示çăŞĺ¤ćăĺĺ¨ăăžăă
-
Tăăă¸ăŽćéťçăŞĺ¤ćăăžă ĺĺ¨ăăŞăĺ ´ĺăŻăIăăäťťćăŽTIăŤĺ¤ćăăžăă ăăŽĺ¤ćăŻăăăTă¸ăŽćéťçăŞăăăŻăšĺĺ¤ć (object) ăŽĺžăŤăobjectăăIă¸ăŽć示çăŞĺç §ĺ¤ćă§ć§ćăăăžăă ĺŽčĄćăŤăTăĺ¤ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺĺ¤ćă¨ăăŚĺŽčĄăăăăăŽĺžăŤć示çăŞĺç §ĺ¤ćăĺŽčĄăăăžăă ĺŽčĄćăŤăTăĺç §ĺăŽĺ ´ĺăĺ¤ćăŻć示çăŞĺç §ĺ¤ćă¨ăăŚĺŽčĄăăăžăă -
UăT(T) ăŤäžĺăăŚăăĺ ´ĺăŻăĺăăŠăĄăźăżăźUăăă ĺŽčĄćăŤăTăĺ¤ĺă§ăUăĺç §ĺăŽĺ ´ĺăĺ¤ćăŻăăăŻăšĺč§Łé¤ĺ¤ćă¨ăăŚĺŽčĄăăăžăă ĺŽčĄćăŤăTă¨UăŽä¸Ąćšăĺ¤ĺă§ăăĺ ´ĺăTă¨UăŻĺż ăăăĺăĺă§ăăăĺ¤ćăŻĺŽčĄăăăžăăă ĺŽčĄćăŤăTăĺç §ĺăŽĺ ´ĺăUăŻĺż ăăăĺç §ĺă§ăăăăĺ¤ćăŻć示çăŞĺç §ĺ¤ćăžă㯠ID ĺ¤ćă¨ăăŚĺŽčĄăăăžăă
ăăăăŽĺ ´ĺăăĺŽčĄćăŤĺ¤ćăĺç §ĺăăĺ¤ĺăŤĺ¤ćăăăĺ ´ĺăŤăŽăżăĺ¤ćăăăăŻăšĺč§Łé¤ĺ¤ćă¨ăăŚĺŽčĄăăăžăă
ä¸č¨ăŽčŚĺă§ăŻăĺśç´ăŽăŞăĺăăŠăĄăźăżăźăăéă¤ăłăżăźăă§ă¤ăšĺă¸ăŽç´ćĽăŽć示çăŞĺ¤ćăŻč¨ąĺŻăăăŚăăžăăăăăăŻéŠăăšăĺŻč˝ć§ăăăăžăă ăăŽăŤăźăŤăŽççąăŻă桡䚹ăé˛ăăăăŽăăăŞĺ¤ćăŽăťăăłăăŁăŻăšăć確ăŤăăăăă§ăă
äž: 揥ăŽĺŽŁč¨ăć¤č¨ăăŚăă ăăă
class X<T> { public static long F(T t) { return (long)t; // Error } }
tăălongă¸ăŽç´ćĽăŽć示çăŞĺ¤ćă訹ĺŻăăăŚăăĺ ´ĺăX<int>.F(7)ăŻ7Lăčżăă¨ç°ĄĺăŤäşćłă§ăăžăă ăă ăăć¨ćşăŽć°ĺ¤ĺ¤ćăŻăăă¤ăłăćăŤĺăć°ĺ¤ă§ăăăă¨ăăăăŁăŚăăĺ ´ĺăŤăŽăżčć Žăăăăăăčć Žăăăžăăă ăťăăłăăŁăŻăšăć確ăŤăăăŤăŻăä¸č¨ăŽäžă䝣ăăăŤč¨čż°ăăĺż čŚăăăăžăăclass X<T> { public static long F(T t) { return (long)(object)t; // Ok, but will only work when T is long } }ăăŽăłăźăăŻăłăłăă¤ăŤăăăžăăăăăăŻăšĺăăă
X<int>.F(7)ăintăŤç´ćĽĺ¤ćă§ăăŞăăăălongăĺŽčĄăăă¨ĺŽčĄćăŤäžĺ¤ăăšăăźăăăžăăend ăŽäž
10.3.9 ăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ć
ăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ćăŻăăŞăăˇă§ăłăŽć¨ćşăŽć示çăŞĺ¤ćă§ć§ćăăăăăŽĺžăŤăŚăźăśăźĺŽçžŠăŽćéťçăžăăŻć示çăŞĺ¤ććźçŽĺăĺŽčĄăăăăăŽĺžăŤĺĽăŽăŞăăˇă§ăłăŽć¨ćşć示çĺ¤ćăĺŽčĄăăăžăă ăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ćăčŠäžĄăăăăăŽćŁç˘şăŞčŚĺăŤă¤ăăŚăŻă §10.5.5 ăĺç §ăăŚăă ăăă
10.4 ć¨ćşĺ¤ć
10.4.1 ĺ ¨čŹ
ć¨ćşĺ¤ćăŻăăŚăźăśăźĺŽçžŠĺ¤ćăŽä¸é¨ă¨ăăŚçşçăăĺŻč˝ć§ăăăäşĺĺŽçžŠć¸ăżăŽĺ¤ćă§ăă
10.4.2 ć¨ćşăŽćéťçăŞĺ¤ć
揥ăŽćéťçăŞĺ¤ćăŻăć¨ćşăŽćéťçăŞĺ¤ćă¨ăăŚĺéĄăăăžăă
- ID ĺ¤ć (§10.2.2)
- ćéťçăŞć°ĺ¤ĺ¤ć (§10.2.3)
- ćéťç㪠null 訹厚ĺ¤ć (§10.2.6)
- null ăŞăăŠăŤĺ¤ć (§10.2.7)
- ćéťçăŞĺç §ĺ¤ć (§10.2.8)
- ăăăŻăšĺ¤ć (§10.2.9)
- ćéťçăŞĺŽć°ĺźăŽĺ¤ć (§10.2.11)
- ĺăăŠăĄăźăżăźăĺŤăćéťçăŞĺ¤ć (§10.2.12)
- ćéťçăŞă¤ăłăŠă¤ăłé ĺĺ¤ć (§10.2.23)
ć¨ćşăŽćéťçăŞĺ¤ćă§ăŻăăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăŻçšăŤé¤ĺ¤ăăăžăă
10.4.3 ć¨ćşăŽć示çăŞĺ¤ć
ć¨ćşăŽć示çăŞĺ¤ćăŻăăăšăŚć¨ćşăŽćéťçăŞĺ¤ćăŤĺ ăăŚăĺ寞ăŽć¨ćşăŽćéťçăŞĺ¤ćăĺĺ¨ăăć示çăŞĺ¤ćăŽăľăăťăăă§ăă
注: ă¤ăžăăĺ
AăăĺBă¸ăŽć¨ćşăŽćéťçăŞĺ¤ćăĺĺ¨ăăĺ ´ĺăć¨ćşăŽć示çăŞĺ¤ćăŻĺAăăĺBăŤăĺBăăĺAăŤĺĺ¨ăăžăă 注é
10.5 ăŚăźăśăźĺŽçžŠăŽĺ¤ć
10.5.1 ĺ ¨čŹ
C# ă§ăŻăăŚăźăśăźĺŽçžŠăŽĺ¤ćăŤăăŁăŚăäşĺăŤĺŽçžŠăăăćéťçăăăłć示çăŞĺ¤ćăćĄĺźľă§ăăžăă ăŚăźăśăźĺŽçžŠăŽĺ¤ćăŻăăŻăŠăšĺă¨ć§é ä˝ĺă§ĺ¤ććźçŽĺ (§15.10.4) ă厣č¨ăăăă¨ăŤăăŁăŚĺ°ĺ Ľăăăžăă
10.5.2 訹ĺŻăăăăŚăźăśăźĺŽçžŠĺ¤ć
C# ă§ăŻăçšĺŽăŽăŚăźăśăźĺŽçžŠĺ¤ćăŽăżă厣č¨ă§ăăžăă çšăŤăć˘ĺăŽćéťçăžăăŻć示çăŞĺ¤ćăĺĺŽçžŠăăăă¨ăŻă§ăăžăăă
çšĺŽăŽă˝ăźăšĺ S ă¨ăżăźă˛ăăĺ TăŽĺ ´ĺă S ăžă㯠T ă null 訹厚ĺ¤ĺăŽĺ ´ĺăŻă Sâ 㨠Tâ ăĺşăŤăŞăĺăĺç
§ăăžăăăă䝼ĺ¤ăŽĺ ´ĺă Sâ 㨠Tâ ăŻăăăă S 㨠T ă¨çăăăŞăăžăă ăŻăŠăšăžăăŻć§é ä˝ăŻă揥ăŽăăšăŚăŤčОĺ˝ăăĺ ´ĺăŤăŽăżăă˝ăźăšĺ S ăăăżăźă˛ăăĺă¸ăŽĺ¤ć T 厣č¨ă§ăăžăă
-
Sâă¨TâăŻç°ăŞăĺă§ăă -
SâăžăăŻTâăŻăćźçŽĺ厣č¨ăčĄăăăăŻăŠăšăžăăŻć§é ä˝ĺă§ăă -
SâăTâăinterface_typeă - ăŚăźăśăźĺŽçžŠăŽĺ¤ćăé¤ăă
SăăTă¸ăŽĺ¤ćăăžăăŻTăăSă¸ăŽĺ¤ćăŻĺĺ¨ăăžăăă
ăŚăźăśăźĺŽçžŠăŽĺ¤ćăŤéŠç¨ăăăĺśéăŻă §15.10.4 ă§ćĺŽăăăŚăăžăă
10.5.3 ăŚăźăśăźĺŽçžŠĺ¤ćăŽčŠäžĄ
ăŚăźăśăźĺŽçžŠăŽĺ¤ćă§ăŻăsource ĺźsource ĺăĺĽăŽĺ (ăżăźă˛ăăĺă¨ĺźă°ăă) ăŤĺ¤ćăăžăă ăŚăźăśăźĺŽçžŠĺ¤ćăŽčŠäžĄăŻăă˝ăźăšĺźă¨ăżăźă˛ăăĺăŽćă ĺşć㎠ăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăčŚă¤ăăăă¨ăä¸ĺżăŤăăŚăăžăă ăăŽćąşĺŽăŻăăăă¤ăăŽćé ăŤĺăăăŚăăžăă
- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć ŽăăăăŻăŠăšă¨ć§é ä˝ăŽăťăăăčŚă¤ăăă ăăŽăťăăăŻăă˝ăźăšĺă¨ăăŽĺşĺşăŻăŠăš (ă˝ăźăšĺăĺĺ¨ăăĺ ´ĺ) ă¨ăăżăźă˛ăăĺă¨ăăŽĺşĺşăŻăŠăšă§ć§ćăăăžăă ăăŽçŽçăŽăăăŤăăŚăźăśăźĺŽçžŠćźçŽĺă厣č¨ă§ăăăŽăŻăŻăŠăšă¨ć§é ä˝ăŽăżă§ăăăăŻăŠăšäťĽĺ¤ăŽĺăŤăŻĺşĺşăŻăŠăšăăŞăăă¨ăĺćă¨ăăŚăăžăă ăžăăă˝ăźăšăžăăŻăżăźă˛ăăăŽĺă null 訹厚ĺ¤ĺăŽĺ ´ĺăŻăĺşăŤăŞăĺă䝣ăăăŤä˝żç¨ăăăžăă
- ăăŽĺăŽăťăăăăăéŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăćąşĺŽăăžăă ĺ¤ććźçŽĺăéŠç¨ăăăŤăŻăă˝ăźăšĺźăăćźçŽĺăŽăŞăăŠăłăĺă¸ăŽć¨ćşĺ¤ć (§10.4) ăĺŽčĄă§ăăćźçŽĺăŽçľćĺăăăżăźă˛ăăĺă¸ăŽć¨ćşĺ¤ćăĺŽčĄă§ăăĺż čŚăăăăžăă
- éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠćźçŽĺăŽăťăăăăăăŠăŽćźçŽĺăćăĺ ˇä˝çă§ăăăăć確ăŤĺ¤ćăăžăă ä¸čŹăŤăćăĺ ˇä˝çăŞćźçŽĺăŻăăŞăăŠăłăĺăă˝ăźăšĺźăŤ "ćăčżă" ćźçŽĺă§ăăăçľćăŽĺăăżăźă˛ăăĺ㍠"ćăčżă" ćźçŽĺă§ăă ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăŻăăŞăăăăăĺ¤ććźçŽĺăăăĺŞĺ ăăăžăă ćăĺ ˇä˝çăŞăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă確çŤăăăăăŽćŁç˘şăŞčŚĺăŻă揥ăŽăľăăŻăŠăšă§ĺŽçžŠăăăŚăăžăă
ćăĺ ˇä˝çăŞăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăçšĺŽăăăă¨ăăŚăźăśăźĺŽçžŠĺ¤ćăŽĺŽéăŽĺŽčĄăŤăŻăć大 3 ă¤ăŽćé ăĺŤăžăăžăă
- ăžăăĺż čŚăŤĺżăăŚăă˝ăźăšĺźăăăŚăźăśăźĺŽçžŠăžăăŻăŞăăĺ¤ććźçŽĺăŽăŞăăŠăłăĺă¸ăŽć¨ćşĺ¤ćăĺŽčĄăăžăă
- 揥ăŤăăŚăźăśăźĺŽçžŠăžăăŻăŞăăăăăĺ¤ććźçŽĺăĺźăłĺşăăŚĺ¤ćăĺŽčĄăăžăă
- ćĺžăŤăĺż čŚăŤĺżăăŚăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăŽçľćĺăăăżăźă˛ăăĺă¸ăŽć¨ćşĺ¤ćăĺŽčĄăăžăă
ăŚăźăśăźĺŽçžŠĺ¤ćăŽčŠäžĄăŤăŻăč¤ć°ăŽăŚăźăśăźĺŽçžŠăžăăŻăŞăăăăăĺ¤ććźçŽĺăĺŤăžăăăă¨ăŻăăăžăăă ă¤ăžăăĺ S ăăĺ T ă¸ăŽĺ¤ćă§ăŻăćĺ㍠S ăă X ă¸ăŽăŚăźăśăźĺŽçžŠĺ¤ćăĺŽčĄăăŚăăă X ăă Tă¸ăŽăŚăźăśăźĺŽçžŠĺ¤ćăĺŽčĄăăăă¨ăŻăăăžăăă
- ăŚăźăśăźĺŽçžŠăŽćéťçăžăăŻć示çăŞĺ¤ćăŽčŠäžĄăŽćŁç˘şăŞĺŽçžŠăŻă揥ăŽăľăăŻăŠăšă§ćĺŽăăžăă ĺŽçžŠă§ăŻă揥ăŽç¨čŞă使ç¨ăăžăă
- ć¨ćşăŽćéťçăŞĺ¤ć (
§10.4.2 ) ăĺăăĺ ăŤĺĺ¨ăă ă ă interface_type ă§ăŞăĺ ´ĺă㯠ăŤĺŤăžăă ă¨ăăă 㯠ăĺ ĺŤ ă¨ăăăžăă - ĺź ăăĺ
Eă¸ăŽć¨ćşăŽćéťçăŞĺ¤ć (B) ăĺĺ¨ăăBăEăŽĺ (ĺĺ¨ăăĺ ´ĺ) ă interface_types ă§ăŞăĺ ´ĺăŻăEăŻBăŤĺ ĺŤăăăŚăăă¨č¨ăăBăŻEăĺ ĺŤăăŚăăă¨č¨ăăžăă - ä¸éŁăŽĺ ćăĺ ĺŤăăĺ ăŻăăťăăĺ ăŽäťăŽăăšăŚăŽĺăĺŤă 1 ă¤ăŽĺă§ăă äťăŽăăšăŚăŽĺăĺŤăĺă 1 ă¤ăăŞăĺ ´ĺăăťăăăŤăŻćăĺ ćŹçăŞĺăŻăăăžăăă ăăç´ćçăŞç¨čŞă§ăŻăćăĺ ćŹçăŞĺăŻăăťăăĺ ㎠"ć大" ĺă§ăăăăăŻăäťăŽĺĺăćéťçăŤĺ¤ćă§ăăĺă§ăă
- ä¸éŁăŽĺ ćăĺ ĺŤăăăĺ ăŻăăťăăĺ ăŽäťăŽăăšăŚăŽĺăŤĺŤăžăă 1 ă¤ăŽĺă§ăă äťăŽăăšăŚăŽĺăŤĺä¸ăŽĺăĺŤăžăăŚăăĺ ´ĺăăťăăăŤăŻćăĺ ĺŤăăăĺăŻăăăžăăă ăăç´ćçăŞç¨čŞă§ăŻăćăĺ ĺŤăăăĺăŻăăťăăĺ ㎠"ćĺ°" ĺă§ăăăăăŻăäťăŽĺĺăŤćéťçăŤĺ¤ćă§ăăĺă§ăă
10.5.4 ăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ć
ĺź E ăăĺ T ă¸ăŽăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăŻă揥ăŽăăăŤĺŚçăăăžăă
-
SăSâăTâăŽç¨ŽéĄăćąşĺŽăăžăă-
EăŤĺăăăĺ ´ĺăŻăăăŽĺSăăžăă -
SăžăăŻTă null 訹厚ĺ¤ĺăŽĺ ´ĺăŻăSᾢă¨TᾢăĺşăŤăŞăĺăŤăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSᾢă¨TᾢăăăăăSăăTă§ăăăăăŤăăžăă -
SᾢăžăăŻTᾢăĺăăŠăĄăźăżăźăŽĺ ´ĺăŻăSâă¨TâăćĺšăŞĺşĺşăŻăŠăšăŤăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSâă¨TâăăăăăSᾢăăTᾢă§ăăăăăŤăăžăă
-
- éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
U) ăć¤ç´˘ăăžăă- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
Dâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăSâ(Sâăĺĺ¨ăăăŻăŠăšăžăăŻć§é ä˝ă§ăăĺ ´ĺ)ăSâăŽĺşĺşăŻăŠăš (Sâăĺĺ¨ăăăŻăŠăšă§ăăĺ ´ĺ)ăăăăłTâ(TâăăŻăŠăšăžăăŻć§é ä˝ăŽĺ ´ĺ) ă§ć§ćăăăžăă ĺăŻăć˘ăŤăťăăăŤĺŤăžăăŚăăĺĽăŽĺă¸ăŽ ID ĺ¤ćăĺĺ¨ăăŞăĺ ´ĺăŤăŽăżăDâăŤčż˝ĺ ăăăžăă - éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
Uâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăDâăĺŤăĺăăEăŤĺŤăžăăĺăŤĺ¤ćăăTăŽăŻăŠăšăžăăŻć§é ä˝ăŤăăŁăŚĺŽŁč¨ăăăăăŚăźăśăźĺŽçžŠăăăłăŞăăăăăćéťçăŞĺ¤ććźçŽĺă§ć§ćăăăžăă -
Uâă犺ă§ăŞăĺ ´ĺăUăŻUâă§ăă ăă䝼ĺ¤ăŽĺ ´ĺ:- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
Dâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăSᾢăŽćĺšăŞă¤ăłăżăźăă§ă¤ăš ăťăă ă¨ăăŽĺşĺşă¤ăłăżăźăă§ă¤ăš (SᾢăĺăăŠăĄăźăżăźă§ăăĺ ´ĺ)ăăăăłTᾢăŽćĺšăŞă¤ăłăżăźăă§ă¤ăš ăťăă (TᾢăĺăăŠăĄăźăżăźă§ăăĺ ´ĺ) ă§ć§ćăăăžăă - éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
Uâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăDâĺ ăŽă¤ăłăżăźăă§ă¤ăšăŤăăŁăŚĺŽŁč¨ăăăăĺEăĺ ĺŤăăĺăăTăĺ ĺŤăăĺă¸ăŽĺ¤ćăčĄăăŚăźăśăźĺŽçžŠăăăłăŞăăăăăćéťçĺ¤ććźçŽĺă§ć§ćăăăžăă -
Uâă犺ă§ăŞăĺ ´ĺăUăŻUâă§ăă
- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
-
Uă犺ăŽĺ ´ĺăĺ¤ćăŻćŞĺŽçžŠă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă -
Sâă§ćźçŽĺăŽćăĺ ˇä˝çăŞă˝ăźăšăŽç¨ŽéĄ (U) ăčŚă¤ăăžăă-
Săĺĺ¨ăăUăăĺ¤ćSćźçŽĺăŽăăăăăĺĺ¨ăăĺ ´ĺăSâăŻSă - ăă䝼ĺ¤ăŽĺ ´ĺă
SâăŻăUăŽćźçŽĺăŽă˝ăźăšĺăŽçľăżĺăăăŽăťăăă§ćăĺ ĺŤăăăĺă§ăă ćăĺ ĺŤăăăŚăăĺă 1 ă¤ă ăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
-
Tâă§ćźçŽĺăŽćăĺ ˇä˝çăŞăżăźă˛ăăĺ (U) ăć¤ç´˘ăăžăă-
UăŽćźçŽĺăŽăăăăăTăŤĺ¤ćăăăĺ ´ĺăTâăŻTă - ăă䝼ĺ¤ăŽĺ ´ĺă
TâăŻăUăŽćźçŽĺăŽăżăźă˛ăăĺăŽçľăżĺăăăťăăă§ćăĺ ćŹçăŞĺă§ăă ćăĺ ĺŤăăĺă 1 ă¤ă ăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăăŤăŞăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
- ćăĺ
ˇä˝çăŞĺ¤ććźçŽĺăć¤ç´˘ăăžăă
-
USâăăTâăŤĺ¤ćăăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă 1 ă¤ă ăĺŤăžăăŚăăĺ ´ĺăăăăŻćăĺ ˇä˝çăŞĺ¤ććźçŽĺă§ăă - ăă䝼ĺ¤ăŽĺ ´ĺă
USâăăTâăŤĺ¤ćăăăŞăăĺ¤ććźçŽĺă 1 ă¤ă ăĺŤăžăăŚăăĺ ´ĺăăăăŻćăĺ ˇä˝çăŞĺ¤ććźçŽĺă§ăă - ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ćăăăăžăăŤăŞăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
- ćĺžăŤăĺ¤ćăéŠç¨ăăžăă
- E ăŤĺ
SâăăŞăĺ ´ĺăŻăEăăSâă¸ăŽć¨ćşçăŞćéťçăŞĺ¤ćăĺŽčĄăăăžăă - ćăĺ
ˇä˝çăŞĺ¤ććźçŽĺăŻă
SâăăTâăŤĺ¤ćăăăăăŤĺźăłĺşăăăžăă -
TâăTăăăŚăăŞăĺ ´ĺăŻăTâăăTă¸ăŽć¨ćşçăŞćéťçăŞĺ¤ćăĺŽčĄăăăžăă
- E ăŤĺ
SĺăăĺTă¸ăŽăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăŻăSĺăŽĺ¤ć°ăăTă¸ăŽăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ćăĺĺ¨ăăĺ ´ĺăŤĺĺ¨ăăžăă
10.5.5 ăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ć
ĺź E ăăĺ T ă¸ăŽăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ćăŻă揥ăŽăăăŤĺŚçăăăžăă
-
SăSâăTâăŽç¨ŽéĄăćąşĺŽăăžăă-
EăŤĺăăăĺ ´ĺăŻăăăŽĺSăăžăă -
SăžăăŻTă null 訹厚ĺ¤ĺăŽĺ ´ĺăŻăSᾢă¨TᾢăĺşăŤăŞăĺăŤăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSᾢă¨TᾢăăăăăSăăTă§ăăăăăŤăăžăă -
SᾢăžăăŻTᾢăĺăăŠăĄăźăżăźăŽĺ ´ĺăŻăSâă¨TâăćĺšăŞĺşĺşăŻăŠăšăŤăăăă䝼ĺ¤ăŽĺ ´ĺăŻăSâă¨TâăăăăăSᾢăăTᾢă§ăăăăăŤăăžăă
-
- éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
U) ăć¤ç´˘ăăžăă- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
Dâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăSâ(Sâăĺĺ¨ăăăŻăŠăšăžăăŻć§é ä˝ă§ăăĺ ´ĺ)ăSâăŽĺşĺşăŻăŠăš (Sâăĺĺ¨ăăăŻăŠăšă§ăăĺ ´ĺ)ăTâ(TâăăŻăŠăšăžăăŻć§é ä˝ăŽĺ ´ĺ)ăăăăłTâăŽĺşĺşăŻăŠăš (TâăăŻăŠăšăŽĺ ´ĺ) ă§ć§ćăăăžăă ĺăŻăć˘ăŤăťăăăŤĺŤăžăăŚăăĺĽăŽĺă¸ăŽ ID ĺ¤ćăĺĺ¨ăăŞăĺ ´ĺăŤăŽăżăDâăŤčż˝ĺ ăăăžăă -
Uââĺ¤ććźçŽĺăŽăťăăăć¤ç´˘ăăžă (§15.10.1ă§15.10.4 ăĺç §)ă-
uncheckedčŠäžĄăłăłăăăšăă§ăŻăDâăŽăŻăŠăšăžăăŻć§é ä˝ăŤăăŁăŚĺŽŁč¨ăăăăăŚăźăśăźĺŽçžŠăŽćéťçăžăăŻé常ăŽć示çăŞĺ¤ććźçŽĺă -
checkedčŠäžĄăłăłăăăšăă§ăŻăăŚăźăśăźĺŽçžŠăŽćéťçăŞĺ¤ććźçŽĺă¨ăDâăŽăŻăŠăšăžăăŻć§é ä˝ăŤăăŁăŚĺŽŁč¨ăăă checked ăăăłć¨ćşăŽć示çăŞĺ¤ććźçŽĺăăĺă厣č¨ĺĺ ă§ăă˘ăŻă¤ăşä¸č´ăă checked ćźçŽĺ厣č¨ăćă¤é常ăŽć示çăŞĺ¤ććźçŽĺăé¤ăăžăă
-
- éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
Uâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăUââĺ ăŽćźçŽĺă§ć§ćăăăEăĺŤăĺăžăăŻSă§ĺ˛ăžăăĺ (ĺĺ¨ăăĺ ´ĺ) ăăăTăĺ ĺŤăžăăŻĺ ĺŤăăĺăŤĺ¤ćăăžăă -
Uâă犺ă§ăŞăĺ ´ĺăUăŻUâă§ăă ăă䝼ĺ¤ăŽĺ ´ĺ:- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
Dâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăSᾢăŽćĺšăŞă¤ăłăżăźăă§ă¤ăš ăťăăă¨ăăŽĺşćŹă¤ăłăżăźăă§ă¤ăš (SᾢăĺăăŠăĄăźăżăźăŽĺ ´ĺ) ă¨ăTᾢăŽćĺšăŞă¤ăłăżăźăă§ă¤ăš ăťăăă¨ăăŽĺşćŹă¤ăłăżăźăă§ă¤ăš (TᾢăĺăăŠăĄăźăżăźăŽĺ ´ĺ) ă§ć§ćăăăžăă -
DâăŽă¤ăłăżăźăă§ă¤ăšăăăUââăŽĺ ´ĺă¨ĺăăă§ăăŻăžăăŻăŞăăŽčŠäžĄăłăłăăăšă ăŤăźăŤă使ç¨ăăŚăĺ¤ććźçŽĺăŽăťăăUââăć¤ç´˘ăăžăă - éŠç¨ĺŻč˝ăŞăŚăźăśăźĺŽçžŠăăăłăŞăăăăăĺ¤ććźçŽĺăŽăťăă (
Uâ) ăć¤ç´˘ăăžăă ăăŽăťăăăŻăUââĺ ăŽćźçŽĺă§ć§ćăăăEăĺŤăĺăžăăŻSă§ĺ˛ăžăăĺ (ĺĺ¨ăăĺ ´ĺ) ăăăTăĺ ĺŤăžăăŻĺ ĺŤăăĺăŤĺ¤ćăăžăă -
Uâă犺ă§ăŞăĺ ´ĺăUăŻUâă§ăă
- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
- ăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăčć
ŽăăăĺăŽăťăă (
-
Uă犺ăŽĺ ´ĺăĺ¤ćăŻćŞĺŽçžŠă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă -
Sâă§ćźçŽĺăŽćăĺ ˇä˝çăŞă˝ăźăšăŽç¨ŽéĄ (U) ăčŚă¤ăăžăă-
Săĺĺ¨ăăUăăĺ¤ćSćźçŽĺăŽăăăăăĺĺ¨ăăĺ ´ĺăSâăŻSă - ăă䝼ĺ¤ăŽĺ ´ĺă
UăŽćźçŽĺăŽăăăăăEăĺŤăĺăăĺ¤ćăăĺ ´ĺăSâăŻăăăăăŽćźçŽĺăŽçľĺăăăă˝ăźăšĺăŽăťăăă§ćăĺ ĺŤĺăŤăŞăăžăă ćăĺ ĺŤăăăĺăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă - ăă䝼ĺ¤ăŽĺ ´ĺă
SâăŻăUăŽćźçŽĺăŽă˝ăźăšĺăŽçľăżĺăăăŽăťăăă§ćăĺ ćŹçăŞĺă§ăă ćăĺ ĺŤăăĺă 1 ă¤ă ăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăăŤăŞăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
-
Tâă§ćźçŽĺăŽćăĺ ˇä˝çăŞăżăźă˛ăăĺ (U) ăć¤ç´˘ăăžăă-
UăŽćźçŽĺăŽăăăăăTăŤĺ¤ćăăăĺ ´ĺăTâăŻTă - ăă䝼ĺ¤ăŽĺ ´ĺă
UăŽćźçŽĺăŽăăăăăTăŤĺŤăžăăĺăŤĺ¤ćăăăĺ ´ĺăTâăŻăăăăăŽćźçŽĺăŽăżăźă˛ăăĺăŽçľăżĺăăăŽä¸ă§ćăĺ ćŹçăŞĺăŤăŞăăžăă ćăĺ ĺŤăăĺă 1 ă¤ă ăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăăŤăŞăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă - ăă䝼ĺ¤ăŽĺ ´ĺă
TâăŻăUăŽćźçŽĺăŽăżăźă˛ăăĺăŽçľăżĺăăăŽăťăăă§ćăĺ ĺŤăăăĺă§ăă ćăĺ ĺŤăăăĺăčŚă¤ăăăŞăĺ ´ĺăĺ¤ćăŻăăăžăă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
- ćăĺ
ˇä˝çăŞĺ¤ććźçŽĺăć¤ç´˘ăăžăă
-
USâăăTâăŤĺ¤ćăăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă 1 ă¤ă ăĺŤăžăăŚăăĺ ´ĺăăăăŻćăĺ ˇä˝çăŞĺ¤ććźçŽĺă§ăă - ăă䝼ĺ¤ăŽĺ ´ĺă
USâăăTâăŤĺ¤ćăăăŞăăĺ¤ććźçŽĺă 1 ă¤ă ăĺŤăžăăŚăăĺ ´ĺăăăăŻćăĺ ˇä˝çăŞĺ¤ććźçŽĺă§ăă - ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ćăăăăžăăŤăŞăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
-
- ćĺžăŤăĺż
čŚăŞăŠăłăżă¤ă ĺ¤ćă揥ăŽé ĺşă§ćąşĺŽăăžăă
-
EăŤĺSâăăŞăĺ ´ĺăŻăEăăSâă¸ăŽć¨ćşçăŞć示çăŞĺ¤ćăĺż čŚă§ăă- ăăŽčż˝ĺ ăăăć¨ćşăŽć示çăŞĺ¤ćăć示çăŞć°ĺ¤ (§10.3.2) ăžăăŻĺćä˝ (§10.3.3) ă§ăăăć
ĺ ąć夹 (§10.3.2) ăŤăŞăĺŻč˝ć§ăăăăăłăłăăăšăă
unchecked(§12.8.20ă §13.12) ă§ăăĺ ´ĺăŻăăłăłăă¤ăŤćăŽčŚĺăçşčĄăăăžăă
注:checkedăłăłăăăšăăŽć ĺ ąă夹ăăăă¨ăŠăłăżă¤ă äžĺ¤ăçşçăăăăăčŚĺăŻĺż čŚăăăžăăă ć ĺ ąć夹ăă˝ăźăšăŤć示çăŞăăŁăšăăčż˝ĺ ăăăă¨ăćĺłăăŚăăĺ ´ĺăŻăăăăćć¸ĺăăčŚĺăçĄéłăŤăăžăă 注é
- ăăŽčż˝ĺ ăăăć¨ćşăŽć示çăŞĺ¤ćăć示çăŞć°ĺ¤ (§10.3.2) ăžăăŻĺćä˝ (§10.3.3) ă§ăăăć
ĺ ąć夹 (§10.3.2) ăŤăŞăĺŻč˝ć§ăăăăăłăłăăăšăă
-
SâăăTâăŤĺ¤ćăăăŤăŻăćăĺ ˇä˝çăŞăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăĺż čŚă§ăă -
TâăTăăăŚăăŞăĺ ´ĺăŻăTâăăTă¸ăŽć¨ćşçăŞć示çăŞĺ¤ćăĺż čŚă§ăă
-
ĺSăăĺă¸ăŽăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ćăŻăTĺăăSă¸ăŽăŚăźăśăźĺŽçžŠăŽć示çăŞĺ¤ćăĺĺ¨ăăĺ ´ĺăŤĺĺ¨Tă
äž:
ăŚăźăśăźĺŽçžŠĺ
DoseăŻă揥ăŽäžă§ä˝żç¨ăăžăăMaxDosageăă大ăăç¨éăŤă¤ăăŚăŻăăŚăźăśăźĺŽçžŠĺLargeDoseăč¨ĺăăăŚăăăăăă䝼ĺ¤ăŽĺ ´ĺăŻä˝żç¨ăăăăă˝ăźăšăŻä¸ăăăăŞăăă¨ăŤćł¨ćăăŚăă ăăăpublic readonly struct Dose { private readonly ushort dose; public Dose(ushort dose) { const ushort MaxDosage = 1000; // mg if (dose > MaxDosage) { throw new ArgumentOutOfRangeException ( $"Dosage too large (> {MaxDosage}mg)." + " Consider LargeDose." ); } this.dose = dose; } public static explicit operator Dose(ushort b) => new Dose(b); public override string ToString() => $"{dose}mg"; // other methods }揥ăŽäžăŻăăŚăźăśăźĺŽçžŠăŽĺ¤ćăäź´ăć示çăŞăăŁăšăăŤé˘ăăä¸č¨ăŽčŚĺă示ăăŚăăžăă
ushort amt0 = 500; // ⤠MaxDosage var dose0 = (Dose)amt0; // amt0 is ushort, no additional conversions added Console.WriteLine(dose0); // outputs 500mg byte amt1 = 250; // ⤠MaxDosage var dose1 = (Dose)amt1; // amt0 is byte, byte to ushort conversion added // this does not risk information loss, no warning Console.WriteLine(dose1); // outputs 250mg var amt3 = 500; // > MaxDosage, var types amt3 as int var dose3 = (Dose)amt3; // amt3 is int, int to ushort conversion added // warning as information loss may occur Console.WriteLine(dose3); // outputs 500mg, no actual information loss ushort amt4 = 1500; // > MaxDosage, requires LargeDose var dose4 = (Dose)amt4; // amt4 is ushort, no additional conversions added // throws ArgumentOutOfRangeException var amt5 = 1500; // > MaxDosage, var types amt5 as int var dose5 = (Dose)amt5; // amt5 is int, int to ushort conversion added // warning as information loss may occur // no actual information loss but out of range // throws ArgumentOutOfRangeException var amt6 = 66036; // var types amt6 as int var dose6 = (Dose)amt6; // amt3 is int, int to ushort conversion added // warning as information loss may occur Console.WriteLine(dose6); // outputs 500mg, not 66036mg, due to information loss // Using a constructor instead of user-defined conversion: var dose7 = new Dose(amt6); // amt6 is int, constructor requires ushort // compile time type errorend ăŽäž
10.6 null 訹厚ĺăĺŤăĺ¤ć
10.6.1 Null 訹厚ĺ¤ć
null 訹厚ĺ¤ćă使ç¨ăăă¨ănull é訹厚ĺ¤ĺăŤĺŻžăăŚĺä˝ăăĺŽçžŠć¸ăżăŽĺ¤ćăăăăŽĺ㎠null 訹厚形ĺźă§ă使ç¨ă§ăăžăă null é訹厚ĺ¤ĺ S ăă null é訹厚ĺ¤ĺăŤĺ¤ćăăĺŽçžŠć¸ăżăŽćéťçăžăăŻć示çăŞĺ¤ćăă¨ăŤă T (§10.2.2ă §10.2.3ă §10.2.4ă §10.2.11ă §10.3.2 ăă㳠§10.3.3)ă揥㎠null 訹厚ĺ¤ćăĺĺ¨ăăžăă
-
S?ăăćéťçăžăăŻć示çăŞĺ¤ćT? -
SăăćéťçăžăăŻć示çăŞĺ¤ćT? -
S?ăăTă¸ăŽć示çăŞĺ¤ćă
null 訹厚ĺ¤ćčŞä˝ăŻăćéťçăžăăŻć示çăŞĺ¤ćă¨ăăŚĺéĄăăăžăă
çšĺŽăŽ null 訹厚ĺ¤ćăŻć¨ćşĺ¤ćă¨ăăŚĺéĄăăăăŚăźăśăźĺŽçžŠĺ¤ćăŽä¸é¨ă¨ăăŚçşçăăĺŻč˝ć§ăăăăžăă ĺ ˇä˝çăŤăŻăăăšăŚăŽćéťç㪠null 訹厚ĺ¤ćăŻć¨ćşăŽćéťçăŞĺ¤ć (§10.4.2) ă¨ăăŚĺéĄăăă §10.4.3 ăŽčŚäťśăćşăăć示ç㪠null 訹厚ĺ¤ćăŻăć¨ćşăŽć示çăŞĺ¤ćă¨ăăŚĺéĄăăăžăă
SăăTă¸ăŽĺşăŤăŞăĺ¤ćăŤĺşăĽă null 訹厚ĺ¤ćăŽčŠäžĄăŻă揥ăŽăăăŤé˛ăżăžăă
- null 訹厚ĺ¤ćă
S?ăăT?ă¸ăŽĺ¤ćăŽĺ ´ĺ:- ă˝ăźăšĺ¤ă null (
HasValueăăăăăŁăfalse) ăŽĺ ´ĺăçľćăŻT?ĺ㎠null ĺ¤ăŤăŞăăžăă - ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ćăŻă
S?ăăSă¸ăŽăŠăăč§Łé¤ăSăăTă¸ăŽĺşăŤăŞăĺ¤ćăTăăT?ă¸ăŽćăčżăă¨ăăŚčŠäžĄăăăžăă
- ă˝ăźăšĺ¤ă null (
- null 訹厚ĺ¤ćă
SăăT?ă¸ăŽĺ¤ćăŽĺ ´ĺăSăăTă¸ăŽĺşăŤăŞăĺ¤ćă¨ăăŚčŠäžĄăăăăăŽĺžăŤTăăT?ă¸ăŽćăčżăăçśăăžăă - null 訹厚ĺ¤ćă
S?ăăTă¸ăŽĺ¤ćăŽĺ ´ĺăĺ¤ćăŻS?ăăSă¸ăŽăŠăăč§Łé¤ă¨ăăŚčŠäžĄăăăăăŽĺžăŤĺşăŤăŞăSăăTă¸ăŽĺ¤ćăčĄăăăžăă
10.6.2 ăŞăăăăăăłăłăăźă¸ă§ăł
null é訹厚ĺ¤ĺăă null é訹厚ĺ¤ĺăŤĺ¤ćăăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺSTăăŞăăăăăĺ¤ććźçŽĺăŻS?ăăT?ăŤĺ¤ćăăžăă ăăŽăŞăăăăăĺ¤ććźçŽĺăŻă S? ăă S ă¸ăŽăŠăăč§Łé¤ăĺŽčĄăăăăŽĺžăŤăŚăźăśăźĺŽçžŠăŽ S ăă T ă¸ăŽĺ¤ćăĺŽčĄăăĺžă T ăă T?ă¸ăŽăŠăăăĺŽčĄăăžăăăă ăănull ĺ¤ S? ă null ĺ¤ăŽ T?ăŤç´ćĽĺ¤ćăăăçšăç°ăŞăăžăă ăŞăăĺ¤ććźçŽĺăŤăŻăĺşăŤăŞăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă¨ĺăćéťçăžăăŻć示çăŞĺéĄăăăăžăă
10.7 ĺżĺé˘ć°ăŽĺ¤ć
10.7.1 ĺ ¨čŹ
anonymous_method_expressionăžăăŻlambda_expressionăŻĺżĺé˘ć° (§12.22) ă¨ăăŚĺéĄăăăžăă ĺźăŤăŻĺăŻăăăžăăăăäşćć§ăŽăăăăŞă˛ăźăĺăŤćéťçăŤĺ¤ćă§ăăžăă ä¸é¨ăŽăŠă ăĺźăŻăäşćć§ăŽăăĺźăăŞăźĺăŤćéťçăŤĺ¤ćăăăĺ ´ĺăăăăžăă
ĺ
ˇä˝çăŤăŻăĺżĺé˘ć° F ăŻăćäž D ăăŞă˛ăźăĺă¨äşćć§ăăăăžăă
-
FăŤanonymous_function_signatureăĺŤăžăăŚăăĺ ´ĺăDă¨FăŻĺăć°ăŽăăŠăĄăźăżăźăćăŁăŚăăžăă -
FăŤanonymous_function_signatureăĺŤăžăăŚăăŞăĺ ´ĺăDăŻăDăŽăăŠăĄăźăżăźăĺşĺăăŠăĄăźăżăźă§ăŞăéăăäťťćăŽĺ㎠0 ĺ䝼ä¸ăŽăăŠăĄăźăżăźăćă¤ăă¨ăă§ăăžăă -
FăŤć示çăŤĺćĺŽăăăăăŠăĄăźăżăź ăŞăšăăăăĺ ´ĺăDăŽĺăăŠăĄăźăżăźăŻăFăŽĺŻžĺżăăăăŠăĄăźăżăźă¨ĺă俎飞ĺăćăĄăparams俎飞ĺă¨ć˘ĺŽĺ¤ăçĄčŚăăFăŽĺŻžĺżăăăăŠăĄăźăżăźé㍠ID ĺ¤ćăĺĺ¨ăăžăă -
FăŤćéťçăŤĺćĺŽăăăăăŠăĄăźăżăź ăŞăšăăăăĺ ´ĺăDăŤăŻĺç §ăăŠăĄăźăżăźăžăăŻĺşĺăăŠăĄăźăżăźăăăăžăăă -
FăŤć示çăŞćťăĺ¤ăŽĺăăăĺ ´ĺăFăŽćťăĺ¤ăŽĺăăDăŽćťăĺ¤ăŽĺă¸ăŽ ID ĺ¤ćăĺĺ¨ăăĺż čŚăăăăžăă -
FăŽćŹćăăĺźă§ăăăăăD㍠viod ăŽćťăĺ¤ăŽĺăăăĺ ´ĺăăžăăŻFéĺćă§ăăĺ ´ĺăăăăłDăŤÂŤTaskTypeÂťćťăĺ¤ăŽĺ¤ăăăĺ ´ĺă§ (§15.14.1)ăFăŽĺăăŠăĄăźăżăźăŤăDă§ĺŻžĺżăăăăŠăĄăźăżăźăŽĺăćĺŽăăăă¨ăFăŽćŹćăŻăćĺšăŞĺź (w.r.t §12) ă¨ăŞăăstatement_expression (§13.7) ă¨ăăŚč¨ąĺŻăăăžăă -
FăŽćŹä˝ăăăăăŻăŽĺ ´ĺă ăžăDvoid ćťăĺ¤ăŽĺorFăŻéĺćă§ăăăDăŻÂŤTaskTypeÂťćťăĺ¤ăŽĺăćăĄăFăŽĺăăŠăĄăźăżăźăŤDăŽĺŻžĺżăăăăŠăĄăźăżăźăŽĺăä¸ăăăăă¨ăFăŽćŹä˝ăŻćĺšăŞăăă㯠(w.r.t §13.3) ă§ăăăreturnăšăăźăăĄăłăă§ĺźăćĺŽăăžăăă -
FăŽćŹćăăĺźă§ăăăăăFăăéĺćă§ăŻăŞăăD㍠évoidćťăĺ¤ăŽĺTăăăăă ăžăăŻFăéĺćă§ăDăŤÂŤTaskTypeÂť<T>ćťăĺ¤ăŽĺăăăĺ ´ĺă§ (§15.14.1)ăFăŽĺăăŠăĄăźăżăźăŤDă§ĺŻžĺżăăăăŠăĄăźăżăźăŽĺăćĺŽăăăă¨ăFăŽćŹćăŻăćĺšăŞĺź (w.r.t §12) ă¨ăŞăăTăŤéťç¤şçăŤĺ¤ćĺŻč˝ă§ăă -
FăŽćŹä˝ăăăăăŻă§ăăăFăééĺćă§ăDă void 䝼ĺ¤ăŽćťăĺ¤ăŽĺTăćă¤ĺ ´ĺăorF㯠async ă§ăăăDăŻÂŤTaskTypeÂť<T>ćťăĺ¤ăŽĺăćăĄăžăăFăŽĺăăŠăĄăźăżăźăŤDăŽĺŻžĺżăăăăŠăĄăźăżăźăŽĺăćĺŽăăăŚăăĺ ´ĺăFăŽćŹä˝ăŻćĺšăŞăšăăźăăĄăłă ăăă㯠(w.r.t §13.3) ă§ăĺ°éä¸č˝ăŞă¨ăłăăă¤ăłăăćăĄăĺ return ăšăăźăăĄăłăăŻćéťçăŤTăŤĺ¤ćĺŻč˝ăŞĺźăćĺŽăăžăă
äž: 揥ăŽäžăŻăăăăăŽčŚĺă示ăăŚăăžăă
delegate void D(int x); D d1 = delegate { }; // Ok D d2 = delegate() { }; // Error, signature mismatch D d3 = delegate(long x) { }; // Error, signature mismatch D d4 = delegate(int x) { }; // Ok D d5 = delegate(int x) { return; }; // Ok D d6 = delegate(int x) { return x; }; // Error, return type mismatch delegate void E(out int x); E e1 = delegate { }; // Error, E has an output parameter E e2 = delegate(out int x) { x = 1; }; // Ok E e3 = delegate(ref int x) { x = 1; }; // Error, signature mismatch delegate int P(params int[] a); P p1 = delegate { }; // Error, end of block reachable P p2 = delegate { return; }; // Error, return type mismatch P p3 = delegate { return 1; }; // Ok P p4 = delegate { return "Hello"; }; // Error, return type mismatch P p5 = delegate(int[] a) // Ok { return a[0]; }; P p6 = delegate(params int[] a) // Error, params modifier { return a[0]; }; P p7 = delegate(int[] a) // Error, return type mismatch { if (a.Length > 0) return a[0]; return "Hello"; }; delegate object Q(params int[] a); Q q1 = delegate(int[] a) // Ok { if (a.Length > 0) return a[0]; return "Hello"; };end ăŽäž
äž: 揥ăŽäžă§ăŻă
Func<A,R>ĺăŽĺźć°ăĺăĺăăAĺăŽĺ¤ăčżăé˘ć°ă襨ăă¸ă§ăăŞă㯠ăăŞă˛ăźăĺRă使ç¨ăăžăădelegate R Func<A,R>(A arg);ĺ˛ăĺ˝ăŚ
Func<int,int> f1 = x => x + 1; // Ok Func<int,double> f2 = x => x + 1; // Ok Func<double,int> f3 = x => x + 1; // Error Func<int, Task<int>> f4 = async x => x + 1; // Okĺĺżĺé˘ć°ăŽăăŠăĄăźăżăźă¨ćťăĺ¤ăŽĺăŻăĺżĺé˘ć°ăĺ˛ăĺ˝ăŚăăăŚăăĺ¤ć°ăŽĺăăćąşĺŽăăăžăă
ćĺăŽäťŁĺ Ľă§ăŻăĺżĺé˘ć°ăăăŞă˛ăźăĺ
Func<int,int>ăŤćŁĺ¸¸ăŤĺ¤ćăăăžăăăăăŻăxăĺintćĺŽăăăă¨ăx + 1ăŻĺintăŤćéťçăŤĺ¤ćă§ăăćĺšăŞĺźă§ăăăăă§ăăĺć§ăŤă2 çŞçŽăŽäťŁĺ Ľă§ăŻăĺżĺé˘ć°ăăăŞă˛ăźăĺ Func<int,double> ăŤćŁĺ¸¸ăŤĺ¤ćăăăžăăăăăŻă(
x + 1ĺăŽ)intăŽçľćăćéťçăŤdoubleĺăŤĺ¤ćă§ăăăăă§ăăăă ăă3 çŞçŽăŽĺ˛ăĺ˝ăŚăŻăłăłăă¤ăŤćă¨ăŠăźă§ăăăăăŻă
xăĺdoublećĺŽăăăĺ ´ĺă(x + 1ĺăŽ)doubleăŽçľćăĺintăŤćéťçăŤĺ¤ćă§ăăŞăăăă§ăă4 çŞçŽăŽäťŁĺ Ľă§ăŻă(
Func<int, Task<int>>ĺăŽ)x + 1ăŽçľćăăćťăĺ¤ăŽĺintăćă¤éĺćăŠă ăăŽćĺšăŞćťăĺ¤ăŽĺintăŤćéťçăŤĺ¤ćă§ăăăăăĺżĺăŽéĺćé˘ć°ăăăŞă˛ăźăĺTask<int>ăŤćŁĺ¸¸ăŤĺ¤ćăăăžăăend ăŽäž
ăŠă ăĺźFăŻăăăŞă˛ăźăĺăŽExpression<D>ă¨äşćć§ăăăĺ ´ĺFDĺźăăŞăźĺă¨äşćć§ăăăăžăă ăăăŻĺżĺăĄă˝ăăăŤăŻéŠç¨ăăăăăŠă ăĺźăŤăŽăżéŠç¨ăăăžăă
ĺżĺé˘ć°ăŻăăŞăźăăźăăźăăŽč§ŁćąşăŤĺ˝ąéżăä¸ăăĺć¨čŤăŤĺĺ ăăĺŻč˝ć§ăăăăžăă 芳細ăŤă¤ăăŚăŻă §12.6 ăĺç §ăăŚăă ăăă
10.7.2 ăăŞă˛ăźăĺă¸ăŽĺżĺé˘ć°ĺ¤ćăŽčŠäžĄ
ĺżĺé˘ć°ăăăŞă˛ăźăĺăŤĺ¤ćăăă¨ăĺżĺé˘ć°ăĺç
§ăăăăŞă˛ăźă ă¤ăłăšăżăłăšăçćăăăžăăăžăăéstatic ĺżĺé˘ć°ăŽĺ ´ĺăŻăčŠäžĄćăŤă˘ăŻăăŁăăŞăăŁăăăŁăăăĺ¤é¨ĺ¤ć°ăŽăťăă (犺ăŽĺŻč˝ć§ăăăăžă) ăçćăăăžăă ăăŞă˛ăźăăĺźăłĺşăăăă¨ăĺżĺé˘ć°ăŽćŹä˝ăĺŽčĄăăăžăă ćŹćĺ
ăŽăłăźăăŻăăăŞă˛ăźăăŤăăŁăŚĺç
§ăăăăăŁăăăŁăăăĺ¤é¨ĺ¤ć°ăŽăťăăă使ç¨ăăŚĺŽčĄăăăžăă
ĺżĺăĄă˝ăăăăăŞă˛ăźăĺăŤĺ¤ćăăăăăŽäťŁćżć§ćă¨ăăŚădelegate_creation_expression (§12.8.17.5) ă使ç¨ă§ăăžăă
ĺżĺé˘ć°ăăçćăăăăăŞă˛ăźăăŽĺźăłĺşăăŞăšăăŤăŻă1 ă¤ăŽă¨ăłăăŞăĺŤăžăăŚăăžăă ăăŞă˛ăźăăŽćŁç˘şăŞăżăźă˛ăă ăŞăă¸ă§ăŻăă¨ăżăźă˛ăă ăĄă˝ăăăŻćĺŽăăăŚăăžăăă çšăŤăăăŞă˛ăźăăŽăżăźă˛ăă ăŞăă¸ă§ăŻăă nullăăăŚăăăăĺ¤ĺ´ăŽé˘ć°ăĄăłăăźăŽ this ĺ¤ă§ăăăăăžăăŻäťăŽăŞăă¸ă§ăŻăă§ăăăăŻä¸ćă§ăă
ăăŁăăăŁăăăĺ¤é¨ĺ¤ć°ă¤ăłăšăżăłăšăŽăťăăăĺă (犺ăŽĺŻč˝ć§ăăă) ăťăăłăăŁăăŻăŤĺăĺżĺé˘ć°ăĺăăăŞă˛ăźăĺăŤĺ¤ćăăă¨ăĺăăăŞă˛ăźă ă¤ăłăšăżăłăšăčżăăă¨ăă§ăăžă (ăă ăăĺż é ă§ăŻăăăžăă)ă ćĺłçăŤĺä¸ă¨ăăç¨čŞăŻăĺżĺé˘ć°ăŽĺŽčĄăăăăšăŚăŽĺ ´ĺăŤĺăĺźć°ăćĺŽăăŚĺăĺšćăçćăăăă¨ăćĺłăăăăăŤä˝żç¨ăăăžăă ăăŽčŚĺăŤăăă揥ăŽăăăŞăłăźăăćéŠĺă§ăăžăă
delegate double Function(double x);
class Test
{
static double[] Apply(double[] a, Function f)
{
double[] result = new double[a.Length];
for (int i = 0; i < a.Length; i++)
{
result[i] = f(a[i]);
}
return result;
}
static void F(double[] a, double[] b)
{
a = Apply(a, (double x) => Math.Sin(x));
b = Apply(b, (double y) => Math.Sin(y));
...
}
}
2 ă¤ăŽĺżĺé˘ć°ăăŞă˛ăźăăŤăŻăăăŁăăăŁăăăĺ¤é¨ĺ¤ć°ăŽĺă (犺ăŽ) ăťăăăăăăĺżĺé˘ć°ăŻćĺłçăŤĺä¸ă§ăăăăăăłăłăă¤ăŠă§ăŻăăŞă˛ăźăăĺăăżăźă˛ăă ăĄă˝ăăăĺç §ăăăă¨ă訹ĺŻăăăžăă ĺŽéăŤăăłăłăă¤ăŠăŻä¸ĄćšăŽĺżĺé˘ć°ĺźăăăžăŁăăĺăăăŞă˛ăźă ă¤ăłăšăżăłăšăčżăăă¨ă訹ĺŻăăăŚăăžăă
10.7.3 ăŠă ăĺźăăĺźăăŞăźĺă¸ăŽĺ¤ćăŽčŠäžĄ
ăŠă ăĺźăĺźăăŞăźĺăŤĺ¤ćăăă¨ăĺźăăŞăźăçćăăăžă (§8.6)ă ăăćŁç˘şăŤăŻăăŠă ăĺźĺ¤ćăŽčŠäžĄă§ăŻăăŠă ăĺźčŞä˝ăŽć§é ă襨ăăŞăă¸ă§ăŻăć§é ăçćăăăžăă
ăăšăŚăŽăŠă ăĺźăĺźăăŞăźĺăŤĺ¤ćă§ăăăăă§ăŻăăăžăăă äşćć§ăŽăăăăŞă˛ăźăĺă¸ăŽĺ¤ćăŻĺ¸¸ăŤ existsăăĺŽčŁ ă§ĺŽçžŠăăăççąăŤăăăłăłăă¤ăŤćăŤĺ¤ąćăăĺŻč˝ć§ăăăăžăă
注: ăŠă ăĺźăĺźăăŞăźĺăŤĺ¤ćă§ăăŞăä¸čŹçăŞççąăŻćŹĄăŽă¨ăăă§ăă
- ăăăŻăăăăăŻćŹä˝ăćăŁăŚăăžă
async俎飞ĺăăăăžă- äťŁĺ ĽćźçŽĺăĺŤăžăăŚăăžă
- ĺşĺăžăăŻĺç §ăăŠăĄăźăżăźăĺŤăžăăŚăăžă
- ĺçăŤăă¤ăłăăăăĺźăĺŤăžăăŚăăžă
注é
ăă§ăăŻćźçŽĺăŽăľăăźăăčż˝ĺ ăăă System.Linq.Expressions.ExpressionăŤăŻă NegateCheckedă AddCheckedă SubtractCheckedă MultiplyCheckedăăăăł ConvertCheckedăŽăăĄăŻă㪠ăĄă˝ăăăčż˝ĺ ăăăžăăă (ăă§ăăŻăăăé¤çŽăŽăăĄăŻă㪠ăĄă˝ăăăŻăăăžăăă)
注: äťŁĺ ĽăŻĺźăăŞăźă§ăŻăľăăźăăăăŚăăŞăăăăăă§ăăŻăăăĺ˘ĺăžăăŻăă§ăăŻăăăăăŻăŞăĄăłăăŤĺŻžăăŚăăŽăăăŞăăĄăŻă㪠ăĄă˝ăăăŻăăăžăăă 注é
10.8 ăĄă˝ăăă°ăŤăźăăŽĺ¤ć
ăĄă˝ăă ă°ăŤăźă (§12.2) ăăäşćć§ăŽăăăăŞă˛ăźăĺ (§21.4) ă¸ăŽćéťçăŞĺ¤ćăĺĺ¨ăăžăă
DăăăŞă˛ăźăĺă§ăEăăĄă˝ăă ă°ăŤăźăă¨ăăŚĺéĄăăăĺźă§ăăĺ ´ĺă DăŻă揥ăŤç¤şăăăăŤăEăŤé常ăŽĺ˝˘ĺź (E) ă§éŠç¨ă§ăăăĄă˝ăăăĺ°ăŞăă¨ă 1 ă¤ĺŤăžăăŚăăĺ ´ĺăŤăŽăżăă¨äşćć§ăăăăžă (§12.6.2D)ă
ăĄă˝ăă ă°ăŤăźă E ăăăăŞă˛ăźăĺă¸ăŽĺ¤ćăŽăłăłăă¤ăŤćăŽă˘ăăŞăąăźăˇă§ăł D 揥ăŤčŞŹćăăžăă
- ăăŠăźă
MăŽăĄă˝ăăĺźăłĺşă (§12.8.10.2) ăŤĺŻžĺżăă 1 ă¤ăŽăĄă˝ăăE(A)ăé¸ćăăă揥ăŽĺ¤ć´ăĺ ăăăăžăă-
Aĺźć°ăŞăšăăŻĺźăŽăŞăšăă§ăăăăăăăĺ¤ć°ă¨ăăŚĺéĄăăăinăŽoutĺ ăŽĺŻžĺżăăăăŠăĄăźăżăźăŽĺă¨äżŽéŁžĺ (refăăăžăăŻD) ă使ç¨ăăžăăăă ăădynamicĺăŽăăŠăĄăźăżăźăé¤ăăžăă寞ĺżăăĺźăŤăŻăobjectă§ăŻăŞăĺdynamicăăăăžăă - čć
ŽăăăĺčŁăĄă˝ăăăŻăé常ăŽĺ˝˘ĺźă§éŠç¨ĺŻč˝ă§ăççĽĺŻč˝ăŞăăŠăĄăźăżăź (§12.6.4.2) ăççĽăăŞăăĄă˝ăăăŽăżă§ăă ăăăăŁăŚăĺčŁăĄă˝ăăăŻăĺąéăăăăăŠăźă ă§ăŽăżéŠç¨ă§ăăĺ ´ĺăăžă㯠1 ă¤äťĽä¸ăŽççĽĺŻč˝ăŞăăŠăĄăźăżăźăŤĺŻžĺżăăăăŠăĄăźăżăźă
DăŤĺŤăžăăŚăăŞăĺ ´ĺăŻçĄčŚăăăžăă
-
-
§12.8.10.2 ăŽă˘ăŤă´ăŞăşă ăă
Mă¨äşćć§ăŽăă (§21.4)Dĺä¸ăŽćéŠăŞăĄă˝ăăăçćăăĺ ´ĺăĺ¤ćăŻĺĺ¨ăăă¨čŚăŞăăăžăă - é¸ćăăăĄă˝ăă
Măă¤ăłăšăżăłăš ăĄă˝ăăăŽĺ ´ĺăEăŤé˘éŁäťăăăăŚăăă¤ăłăšăżăłăšĺźăŤăăŁăŚăăŞă˛ăźăăŽăżăźă˛ăă ăŞăă¸ă§ăŻăăćąşĺŽăăăžăă - é¸ćăăăĄă˝ăă
Măăă¤ăłăšăżăłăšĺźăŽăĄăłăăź ă˘ăŻăťăšăŤăăŁăŚç¤şăăăćĄĺźľăĄă˝ăăă§ăăĺ ´ĺăăăŽă¤ăłăšăżăłăšĺźăŤăăŁăŚăăŞă˛ăźăăŽăżăźă˛ăă ăŞăă¸ă§ăŻăăćąşĺŽăăăžăă - ĺ¤ćăŽçľćăŻă
DĺăŽĺ¤ăă¤ăžăăé¸ćăăăĄă˝ăăă¨ăżăźă˛ăă ăŞăă¸ă§ăŻăăĺç §ăăăăŞă˛ăźăă§ăă
äž: ăĄă˝ăă ă°ăŤăźăăŽĺ¤ćă揥ăŤç¤şăăžăă
delegate string D1(object o); delegate object D2(string s); delegate object D3(); delegate string D4(object o, params object[] a); delegate string D5(int i); class Test { static string F(object o) {...} static void G() { D1 d1 = F; // Ok D2 d2 = F; // Ok D3 d3 = F; // Error â not applicable D4 d4 = F; // Error â not applicable in normal form D5 d5 = F; // Error â applicable but not compatible } }
d1ă¸ăŽäťŁĺ ĽăŤăăăăĄă˝ăă ă°ăŤăźăFăD1ĺăŽĺ¤ăŤćéťçăŤĺ¤ćăăăžăă
d2ă¸ăŽĺ˛ăĺ˝ăŚăŻăć´žç (ĺĺ¤) ăăŠăĄăźăżăźĺăĺ°ăŞăăăăć´žç (ĺ ąĺ¤) ăŽćťăĺ¤ăŽĺăćă¤ăĄă˝ăăă¸ăŽăăŞă˛ăźăăä˝ćăăćšćłă示ăăŚăăžăă
d3ă¸ăŽĺ˛ăĺ˝ăŚăŻăăĄă˝ăăăéŠç¨ă§ăăŞăĺ ´ĺăŤĺ¤ćăĺĺ¨ăăŞăćšćłă示ăăžăă
d4ă¸ăŽĺ˛ăĺ˝ăŚăŻăăĄă˝ăăăé常ăŽĺ˝˘ĺźă§éŠç¨ăăćšćłă示ăăŚăăžăă
d5ă¸ăŽĺ˛ăĺ˝ăŚă§ăŻăăăŞă˛ăźăă¨ăĄă˝ăăăŽăăŠăĄăźăżăźă¨ćťăĺ¤ăŽĺăĺç §ĺă§ăŽăżç°ăŞăăă¨ă訹ĺŻăăćšćłă示ăăžăăend ăŽäž
äťăŽăăšăŚăŽćéťçăăăłć示çăŞĺ¤ćă¨ĺć§ăŤăăăŁăšăćźçŽĺă使ç¨ăăŚçšĺŽăŽĺ¤ćăć示çăŤĺŽčĄă§ăăžăă
äž: ăăăăŁăŚăäž
object obj = new EventHandler(myDialog.OkClick);䝣ăăăŤć¸ăčžźăăă¨ăă§ăă
object obj = (EventHandler)myDialog.OkClick;end ăŽäž
ăĄă˝ăă ă°ăŤăźăĺ¤ćă§ăŻă Eĺ
ă§ĺĺźć°ăć示çăŤćĺŽăăăăĺć¨čŤă使ç¨ăăŚă¸ă§ăăŞă㯠ăĄă˝ăăăĺç
§ă§ăăžă (§12.6.3)ă ĺć¨čŤă使ç¨ăăĺ ´ĺăăăŞă˛ăźăăŽăăŠăĄăźăżăźĺăŻć¨čŤăăăťăšă§ĺźć°ĺă¨ăăŚä˝żç¨ăăăžăă ăăŞă˛ăźăăŽćťăĺ¤ăŽĺăŻăć¨čŤăŤăŻä˝żç¨ăăăžăăă ĺĺźć°ăćĺŽăăăŚăăăć¨čŤăăăŚăăăăŤé˘äżăŞăăăăăăŻăĄă˝ăă ă°ăŤăźăĺ¤ćăăăťăšăŽä¸é¨ă§ăăăăăăŻăçľćăŽăăŞă˛ăźăăĺźăłĺşăăăă¨ăăŤăżăźă˛ăă ăĄă˝ăăăĺźăłĺşăăăăŤä˝żç¨ăăăĺĺźć°ă§ăă
äž:
delegate int D(string s, int i); delegate int E(); class X { public static T F<T>(string s, T t) {...} public static T G<T>() {...} static void Main() { D d1 = F<int>; // Ok, type argument given explicitly D d2 = F; // Ok, int inferred as type argument E e1 = G<int>; // Ok, type argument given explicitly E e2 = G; // Error, cannot infer from return type } }end ăŽäž
ăĄă˝ăă ă°ăŤăźăăŻăăŞăźăăźăăźăăŽč§ŁćąşăŤĺ˝ąéżăä¸ăăĺć¨čŤăŤĺĺ ăăĺ ´ĺăăăăžăă 芳細ăŤă¤ăăŚăŻă §12.6 ăĺç §ăăŚăă ăăă
ăĄă˝ăă ă°ăŤăźăĺ¤ćăŽĺŽčĄćăŽčŠäžĄăŻă揥ăŽăăăŤčĄăăăžăă
- ăłăłăă¤ăŤćăŤé¸ćăăăăĄă˝ăăăă¤ăłăšăżăłăš ăĄă˝ăăă§ăăĺ ´ĺăăžăăŻă¤ăłăšăżăłăš ăĄă˝ăăă¨ăăŚă˘ăŻăťăšăăăćĄĺźľăĄă˝ăăă§ăăĺ ´ĺăăăŞă˛ăźăăŽăżăźă˛ăă ăŞăă¸ă§ăŻăăŻă
EăŤé˘éŁäťăăăăă¤ăłăšăżăłăšĺźăăćąşĺŽăăăžăă- ă¤ăłăšăżăłăšĺźăčŠäžĄăăăžăă ăăŽčŠäžĄăŤăăŁăŚäžĺ¤ăçşçăăĺ ´ĺăăă䝼ä¸ăŽćé ăŻĺŽčĄăăăžăăă
- ă¤ăłăšăżăłăšĺźă reference_typeăŽĺ ´ĺăă¤ăłăšăżăłăšĺźăŤăăŁăŚč¨çŽăăăĺ¤ăăżăźă˛ăă ăŞăă¸ă§ăŻăăŤăŞăăžăă é¸ćăăăĄă˝ăăăă¤ăłăšăżăłăš ăĄă˝ăăă§ăăăăżăźă˛ăă ăŞăă¸ă§ăŻăă
nullĺ ´ĺăSystem.NullReferenceExceptionăăšăăźăăăăă䝼ä¸ăŽćé ăŻĺŽčĄăăăžăăă - ă¤ăłăšăżăłăšĺźă value_typeăŽĺ ´ĺăĺ¤ăăŞăă¸ă§ăŻăăŤĺ¤ćăăăăăŤăăăŻăšĺćä˝ (§10.2.9) ăĺŽčĄăăăăăŽăŞăă¸ă§ăŻăăăżăźă˛ăă ăŞăă¸ă§ăŻăăŤăŞăăžăă
- ăă䝼ĺ¤ăŽĺ ´ĺăé¸ćăăăĄă˝ăăăŻéçăĄă˝ăăĺźăłĺşăăŽä¸é¨ă§ăăăăăŞă˛ăźăăŽăżăźă˛ăă ăŞăă¸ă§ăŻăăŻ
nullă - 揥ăŽăăăŤăăłăłăă¤ăŤćăŤćąşĺŽăăăăĄă˝ăăă¸ăŽĺç
§ă¨ăä¸č¨ă§č¨çŽăăăăżăźă˛ăă ăŞăă¸ă§ăŻăă¸ăŽĺç
§ă使ç¨ăăŚăăăŞă˛ăźăĺ
DăŽăăŞă˛ăźă ă¤ăłăšăżăłăšăĺĺžăăăžăă- ăăŽĺ¤ćăŻăăăăăŽĺç §ăć˘ăŤĺŤăžăăŚăăć˘ĺăŽăăŞă˛ăźă ă¤ăłăšăżăłăšă使ç¨ăăăă¨ă訹ĺŻăăăžă (ĺż é ă§ăŻăăăžăă)ă
- ć˘ĺăŽă¤ăłăšăżăłăšăĺĺŠç¨ăăăŞăăŁăĺ ´ĺăŻăć°ăăă¤ăłăšăżăłăšăä˝ćăăăžă (§21.5)ă ć°ăăă¤ăłăšăżăłăšăĺ˛ăĺ˝ăŚăăŽăŤĺĺăŞăĄă˘ăŞăăŞăĺ ´ĺăŻă
System.OutOfMemoryExceptionăăšăăźăăăžăă ăă䝼ĺ¤ăŽĺ ´ĺăă¤ăłăšăżăłăšăŻćĺŽăăăĺç §ă§ĺćĺăăăžăă
ECMA C# draft specification