Note
ăăŽăăźă¸ăŤă˘ăŻăťăšăăăŤăŻăćżčŞăĺż čŚă§ăă ăľă¤ăłă¤ăłăžăăŻăăŁăŹăŻăăŞăŽĺ¤ć´ă芌ăăă¨ăă§ăăžăă
ăăŽăăźă¸ăŤă˘ăŻăťăšăăăŤăŻăćżčŞăĺż čŚă§ăă ăăŁăŹăŻăăŞăŽĺ¤ć´ă芌ăăă¨ăă§ăăžăă
ĺ¤ćă¨ăŻăăăĺăăĺĽăŽĺăŤĺ¤ăĺ¤ć´ăăăăăťăšă§ăă ăă¨ăă°ăIntegerĺăŽĺ¤ăDoubleĺăŽĺ¤ăŤĺ¤ćăăăăĺDerivedăŽĺ¤ăBaseĺăŽĺ¤ăŤĺ¤ćăăăă§ăăžăăăăăŻăBaseă¨DerivedăŽä¸ĄćšăăŻăŠăšă§ăăăBaseăăçśćżDerivedă¨čŚăŞăăăžăă ĺ¤ćă§ăŻă(ĺžč
ăŽäžăŽăăăŤ) ĺ¤čŞä˝ăĺ¤ć´ăăĺż
čŚăăŞăĺ ´ĺăă(ĺăŽäžăŽăăăŤ) ĺ¤čĄ¨çžă大ĺš
ăŤĺ¤ć´ăăĺż
čŚăăăĺ ´ĺăăăăžăă
ĺ¤ćăŻćĄĺ¤§ăžăăŻç¸Žĺ°ăŽăŠăĄăă§ăăăžăăžăăă
ćĄĺ¤§ĺ¤ćă¨ăŻăĺăăĺĽăŽĺă¸ăŽĺ¤ćă§ăĺ¤ăăĄă¤ăłăĺ°ăŞăă¨ăĺ
ăŽĺăŽĺ¤ăăĄă¤ăłăăă大ăăăŚă大ăăăŞăĺ ´ĺă§ăă ćĄĺ¤§ĺ¤ćă夹ćăăăă¨ăŻăăăžăăă
縎ĺ°ĺ¤ćă¨ăŻăĺăăĺĽăŽĺă¸ăŽĺ¤ćă§ăĺ¤ăăĄă¤ăłăĺ
ăŽĺăŽĺ¤ăăĄă¤ăłăăăĺ°ăăăăĺ¤ćăčĄăă¨ă (ăă¨ăă°ăIntegerăăStringăŤĺ¤ćăăĺ ´ĺ) ăŤçšĺĽăŞćł¨ćăćăĺż
čŚăăăăă¨ăĺĺăŤé˘äżăăăăžăăă ć
ĺ ąăŽć夹ăäź´ăĺŻč˝ć§ăăăĺ¤ćăŽç¸Žĺ°ăŻĺ¤ąćăăĺŻč˝ć§ăăăăžăă
ID ĺ¤ć (ă¤ăžăăĺăăăăčŞä˝ă¸ăŽĺ¤ć) ă¨ć˘ĺŽĺ¤ăŽĺ¤ć (ă¤ăžăă NothingăăăŽĺ¤ć) ăŻăăăšăŚăŽĺăŤĺŻžăăŚĺŽçžŠăăăžăă
ćéťçăŞĺ¤ćă¨ć示çăŞĺ¤ć
ĺ¤ćăŤăŻă ćéťç ăžă㯠ć示çăŽăăăăăćĺŽă§ăăžăă ćéťçăŞĺ¤ćăŻăçšĺĽăŞć§ćăŞăă§čĄăăăžăă
Integerĺ¤ăăLongĺ¤ă¸ăŽćéťçăŞĺ¤ćăŽäžă揥ăŤç¤şăăžăă
Module Test
Sub Main()
Dim intValue As Integer = 123
Dim longValue As Long = intValue
Console.WriteLine(intValue & " = " & longValue)
End Sub
End Module
ä¸ćšăć示çăŞĺ¤ćăŤăŻăăŁăšăćźçŽĺăĺż
čŚă§ăă ăăŁăšăćźçŽĺăŞăă§ĺ¤ăŤĺŻžăăŚć示çăŞĺ¤ćăĺŽčĄăăăă¨ăăă¨ăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă 揥ăŽäžă§ăŻăć示çăŞĺ¤ćă使ç¨ăăŚă Long ĺ¤ă Integer ĺ¤ăŤĺ¤ćăăžăă
Module Test
Sub Main()
Dim longValue As Long = 134
Dim intValue As Integer = CInt(longValue)
Console.WriteLine(longValue & " = " & intValue)
End Sub
End Module
ćéťçăŞĺ¤ćăŽăťăăăŻăăłăłăă¤ăŤç°ĺ˘ă¨ Option Strict ăšăăźăăĄăłăăŤăăŁăŚç°ăŞăăžăă ĺłĺŻăŞăťăăłăăŁăŻăšă使ç¨ăăăŚăăĺ ´ĺăćĄĺ¤§ĺ¤ćăŽăżăćéťçăŤçşçăăĺŻč˝ć§ăăăăžăă 訹厚ăťăăłăăŁăŻăšă使ç¨ăăăŚăăĺ ´ĺăćĄĺ¤§ĺ¤ćă¨ç¸Žĺ°ĺ¤ć (ă¤ăžăăăăšăŚăŽĺ¤ć) ăăăšăŚćéťçăŤçşçăăĺŻč˝ć§ăăăăžăă
ăăźăŤĺĺ¤ć
BooleanăŻć°ĺ¤ĺă§ăŻăăăžăăăăĺćĺă§ăăăăŽăăăŤć°ĺ¤ĺă¨ăŽéă§ç¸Žĺ°ĺ¤ćăčĄăăžăă ăŞăăŠăŤTrueăŻăByteă255UShortăŽ65535ăUIntegerăŽ4294967295ăULongăŽ18446744073709551615ăăăăłSByteăShortăIntegerăLongăDecimalăSingleăăăăłDoubleăŽĺź-1ăŤĺ¤ćăăăžăă ăŞăăŠăŤ False ăŻăŞăăŠăŤ 0ăŤĺ¤ćăăăžăă ć°ĺ¤ă 0 ăŽĺ ´ĺăăŞăăŠăŤ FalseăŤĺ¤ćăăăžăă ăăŽäťăŽăăšăŚăŽć°ĺ¤ăŻăăŞăăŠăŤ TrueăŤĺ¤ćăăăžăă
ăăźăŤĺ¤ăăćĺĺă¸ăŽç¸Žĺ°ĺ¤ćăăăă System.Boolean.TrueString ăžă㯠System.Boolean.FalseStringăŤĺ¤ćăăăžăă
StringăăBooleană¸ăŽç¸Žĺ°ĺ¤ćăăăăžăăćĺĺăTrueStringăžăăŻFalseString (çžĺ¨ăŽăŤăŤăăŁă§ăŻĺ¤§ćĺă¨ĺ°ćĺăĺşĺĽăăăŤ) ă¨çăăĺ ´ĺăŻăéŠĺăŞĺ¤ă使ç¨ăăžăăăă䝼ĺ¤ăŽĺ ´ĺăŻăćĺĺăć°ĺ¤ĺ (ĺŻč˝ăŞĺ ´ĺ㯠16 é˛ć°ăžă㯠8 é˛ć°)ă¨ăăŚč§Łćăăä¸č¨ăŽčŚĺă使ç¨ăăžăăăă䝼ĺ¤ăŽĺ ´ĺăŻSystem.InvalidCastExceptionăăšăăźăăžăă
ć°ĺ¤ĺ¤ć
ć°ĺ¤ĺ¤ćăŻă Byteă SByteă UShortă Shortă UIntegeră Integeră ULongă Longă Decimală Single ă DoubleăăăăłăăšăŚăŽĺćĺăŽéăŤĺĺ¨ăăžăă ĺ¤ćăăăĺ ´ĺăĺćĺăŻĺşăŤăŞăĺă§ăăăăŽăăăŤćąăăăžăă ĺćĺăŤĺ¤ćăăĺ ´ĺăă˝ăźăšĺ¤ăŻăĺćĺă§ĺŽçžŠăăăŚăăĺ¤ăŽăťăăăŤćşć ăăĺż
čŚăŻăăăžăăă äžăă°ćŹĄăćăăăăžăă
Enum Values
One
Two
Three
End Enum
Module Test
Sub Main()
Dim x As Integer = 5
' OK, even though there is no enumerated value for 5.
Dim y As Values = CType(x, Values)
End Sub
End Module
ć°ĺ¤ĺ¤ćăŻăĺŽčĄćăŤćŹĄăŽăăăŤĺŚçăăăžăă
ć°ĺ¤ĺăăăăĺşăć°ĺ¤ĺă¸ăŽĺ¤ćăŽĺ ´ĺăĺ¤ăŻĺç´ăŤĺşăĺăŤĺ¤ćăăăžăă
UIntegerăIntegerăULongăLongăăžăăŻDecimalăăSingleăžăăŻDoubleă¸ăŽĺ¤ćăŻăćăčżăSingleăžăăŻDoubleĺ¤ăŤä¸¸ăăăăžăă ăăŽĺ¤ćăŤăăŁăŚç˛žĺşŚă夹ăăăĺŻč˝ć§ăŻăăăćĄéăăŤăŞăăă¨ăŻăăăžăăăć´ć°ĺăăĺĽăŽć´ć°ĺă¸ăŽĺ¤ćăăžăăŻć´ć°ĺă¸ăŽ
SingleăDoubleăăžăăŻDecimalăăăŽĺ¤ćăŽĺ ´ĺăçľćăŻć´ć°ăŞăźăăźăăăź ăă§ăăŻăăŞăłăăŠăăăŤăăŁăŚç°ăŞăăžăăć´ć°ăŞăźăăźăăăźăăă§ăăŻăăăŚăăĺ ´ĺ:
ă˝ăźăšăć´ć°ĺăŽĺ ´ĺăĺ¤ćĺ ăŽĺźć°ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ăŤăăĺ ´ĺăĺ¤ćăŻćĺăăžăă ĺ¤ćĺ ăŽĺźć°ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ¤ăŽĺ ´ĺă
System.OverflowExceptionäžĺ¤ăăšăăźăăăžăăă˝ăźăšă
SingleăDoubleăăžăăŻDecimalăŽĺ ´ĺăă˝ăźăšĺ¤ăŻćăčżăć´ć°ĺ¤ăŤĺăä¸ăăăăăĺăć¨ăŚăăăăăŽć´ć°ĺ¤ăĺ¤ćăŽçľćăŤăŞăăžăă ă˝ăźăšĺ¤ă 2 ă¤ăŽć´ć°ĺ¤ăŤçăăčżăĺ ´ĺăĺ¤ăŻćä¸ä˝ćĄăŽĺść°ăŽĺ¤ăŤä¸¸ăăăăžăă çľćăŽć´ć°ĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ¤ăŽĺ ´ĺăŻăSystem.OverflowExceptionäžĺ¤ăăšăăźăăăžăă
ć´ć°ăŞăźăăźăăăźăăă§ăăŻăăăŚăăŞăĺ ´ĺ:
ă˝ăźăšăć´ć°ĺăŽĺ ´ĺăĺ¤ćăŻĺ¸¸ăŤćĺăăă˝ăźăšĺ¤ăŽćä¸ä˝ăăăăç ´ćŁăăă ăă§ć§ćăăăžăă
ă˝ăźăšă
SingleăDoubleăăžăăŻDecimalăŽĺ ´ĺăĺ¤ćăŻĺ¸¸ăŤćĺăăă˝ăźăšĺ¤ăćăčżăć´ć°ĺ¤ăŤä¸¸ăăă ăă§ć§ćăăăžăă ă˝ăźăšĺ¤ă 2 ă¤ăŽć´ć°ĺ¤ăŤçăăčżăĺ ´ĺăĺ¤ăŻĺ¸¸ăŤăćä¸ä˝ćĄăŽĺść°ăŽĺ¤ăŤä¸¸ăăăăžăă
DoubleăăSingleă¸ăŽĺ¤ćă§ăŻăDoubleĺ¤ăŻćăčżăSingleĺ¤ăŤä¸¸ăăăăžăăDoubleĺ¤ăĺ°ăăăăŚSingleă¨ăăŚčĄ¨ăă¨ăçľćăŻćŁăŽăźăăžăăŻč˛ ăŽăźăăŤăŞăăžăăDoubleĺ¤ă大ăăăăŚSingleă¨ăăŚčĄ¨ăă¨ăçľćăŻćŁăŽçĄé大ăžăăŻč˛ ăŽçĄé大ăŤăŞăăžăăDoubleĺ¤ăNaNĺ ´ĺăçľćăNaNăSingleăžăăŻDoubleăăDecimală¸ăŽĺ¤ćă§ăŻăă˝ăźăšĺ¤ăŻDecimal襨çžăŤĺ¤ćăăăĺż čŚăŤĺżăăŚĺ°ć°çšäťĽä¸ 28 ćĄçŽăŽĺžăŽćăčżăć°ĺ¤ăŤä¸¸ăăăăžăă ă˝ăźăšĺ¤ăĺ°ăăăăŚDecimală¨ăăŚčĄ¨ăă¨ăçľć㯠0 ăŤăŞăăžăă ă˝ăźăšĺ¤ăNaNăçĄé大ăăžăăŻĺ¤§ăăăăŚDecimală¨ăăŚčĄ¨ăăŤăŻăSystem.OverflowExceptionäžĺ¤ăăšăăźăăăžăăDoubleăăSingleă¸ăŽĺ¤ćă§ăŻăDoubleĺ¤ăŻćăčżăSingleĺ¤ăŤä¸¸ăăăăžăăDoubleĺ¤ăĺ°ăăăăŚSingleă¨ăăŚčĄ¨ăă¨ăçľćăŻćŁăŽăźăăžăăŻč˛ ăŽăźăăŤăŞăăžăăDoubleĺ¤ă大ăăăăŚSingleă¨ăăŚčĄ¨ăă¨ăçľćăŻćŁăŽçĄé大ăžăăŻč˛ ăŽçĄé大ăŤăŞăăžăăDoubleĺ¤ăNaNĺ ´ĺăçľćăNaNă
ĺç §ĺ¤ć
ĺç §ĺăŻĺşćŹĺăŤĺ¤ćă§ăăăăŽéăĺŻč˝ă§ăă ĺşćŹĺăăć´žçĺă¸ăŽĺ¤ćăŻăĺ¤ćăăăĺ¤ă null ĺ¤ăć´žçĺčŞä˝ăăžăăŻăăĺ¤ăăŽć´žçĺă§ăăĺ ´ĺăŤăŽăżăĺŽčĄćăŤćĺăăžăă
ăŻăŠăšă¨ă¤ăłăżăźăă§ă¤ăšăŽĺăŻăäťťćăŽă¤ăłăżăźăă§ă¤ăšĺă¨ăŽéă§ăăŁăšăă§ăăžăă ĺă¨ă¤ăłăżăźăă§ă¤ăšĺăŽéăŽĺ¤ćăŻăé˘äżăăĺŽéăŽĺăŤçśćżăžăăŻĺŽčŁ
ăŞăŹăźăˇă§ăłăˇăăăăăĺ ´ĺăŤăŽăżăĺŽčĄćăŤćĺăăžăă ă¤ăłăżăźăă§ă¤ăšĺăŤăŻĺ¸¸ăŤă Objectăăć´žçăăĺăŽă¤ăłăšăżăłăšăĺŤăžăăăăăă¤ăłăżăźăă§ă¤ăšĺăŻĺ¸¸ăŤ Objectă¨ăŽéă§ăăŁăšăăăăă¨ăă§ăăžăă
"注: COM ăŻăŠăšă襨ăăŻăŠăšăŤăŻĺŽčĄćăžă§ä¸ćăŞă¤ăłăżăźăă§ă¤ăšĺŽčŁ
ăăăĺŻč˝ć§ăăăăăă NotInheritable ăŻăŠăšăĺŽčŁ
ăăŞăă¤ăłăżăźăă§ă¤ăšă¨ăŽéă§ĺ¤ćăăŚăă¨ăŠăźă§ăŻăăăžăăă
ĺŽčĄćăŤĺç
§ĺ¤ćă夹ćăăă¨ă System.InvalidCastException äžĺ¤ăăšăăźăăăžăă
ĺç §ĺćŁĺ¤ć
ă¸ă§ăăŞă㯠ă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăăŤăŻăĺăŽäşćć§ăŽăăăăŞă˘ăłăéăŽĺ¤ćăĺŻč˝ăŤăăăăŞă˘ăłăĺăăŠăĄăźăżăźăăăĺ ´ĺăăăăžăă ăăăăŁăŚăĺŽčĄćăŤăăŻăŠăšĺăžăăŻă¤ăłăżăźăă§ă¤ăšĺăăăçśćżăžăăŻĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšĺă¨äşćć§ăŽăăăăŞă˘ăłăĺă¸ăŽĺ¤ćăŻćĺăăžăă ĺć§ăŤăăăŞă˛ăźăĺăŻăăăŞă˘ăłăäşćăăŞă˛ăźăĺă¨ăŽéă§ăăŁăšăă§ăăžăă ăă¨ăă°ăăăŞă˛ăźăĺ
Delegate Function F(Of In A, Out R)(a As A) As R
ă§ăŻă F(Of Object, Integer) ăă F(Of String, Integer)ă¸ăŽĺ¤ćăĺŻč˝ăŤăŞăăžăă ă¤ăžăăObjectăĺăĺăăăŞă˛ăźă FăŻăStringăĺăĺăăăŞă˛ăźă Fă¨ăăŚĺŽĺ
¨ăŤä˝żç¨ă§ăăžăă ăăŞă˛ăźăăĺźăłĺşăăăă¨ăăżăźă˛ăă ăĄă˝ăăăŻăŞăă¸ă§ăŻăăĺăĺăăćĺĺăŻăŞăă¸ă§ăŻăăŤăŞăăžăă
ă¸ă§ăăŞă㯠ăăŞă˛ăźăĺăžăăŻă¤ăłăżăźăă§ă¤ăšĺS(Of S1,...,Sn)ăŻă揥ăŽĺ ´ĺăŤT(Of T1,...,Tn)ă¸ă§ăăŞă㯠ă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˛ăźăĺă¨äşćć§ăăăăăŞă˘ăłăĺă¨č¨ăăăžăă
STăŻăŠăĄăăĺăă¸ă§ăăŞăăŻĺU(Of U1,...,Un)ăăć§çŻăăăžăăĺĺăăŠăĄăźăżăźăŽ
Ux:ĺăăŠăĄăźăżăźăĺćŁăŞăă§ĺŽŁč¨ăăăĺ ´ĺă
Sxă¨TxăŻĺăĺă§ăăĺż čŚăăăăžăăĺăăŠăĄăźăżăźă
In厣č¨ăăăŚăăĺ ´ĺăŻăSxăăTxă¸ăŽćĄĺźľ IDăć˘ĺŽăĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăĺż čŚă§ăăĺăăŠăĄăźăżăźă
Out厣č¨ăăăŚăăĺ ´ĺăŻăTxăăSxă¸ăŽćĄĺźľ IDăć˘ĺŽăĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăĺż čŚă§ăă
ăăŞă˘ăłăĺăăŠăĄăźăżăźă使ç¨ăăŚăŻăŠăšăăă¸ă§ăăŞă㯠ă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćăăĺ ´ĺăăŻăŠăšăč¤ć°ăŽăăŞă˘ăłăäşćă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăŚăăĺ ´ĺăéăăŞă˘ăłăĺ¤ćăăŞăĺ ´ĺăĺ¤ćăŻăăăžăăŤăŞăăžăă äžăă°ćŹĄăćăăăăžăă
Class Base
End Class
Class Derived1
Inherits Base
End Class
Class Derived2
Inherits Base
End Class
Class OneAndTwo
Implements IEnumerable(Of Derived1)
Implements IEnumerable(Of Derived2)
End Class
Class BaseAndOneAndTwo
Implements IEnumerable(Of Base)
Implements IEnumerable(Of Derived1)
Implements IEnumerable(Of Derived2)
End Class
Module Test
Sub Main()
' Error: conversion is ambiguous
Dim x As IEnumerable(Of Base) = New OneAndTwo()
' OK, will pick up the direct implementation of IEnumerable(Of Base)
Dim y as IEnumerable(Of Base) = New BaseAndOneAndTwo()
End Sub
End Module
ĺżĺăăŞă˛ăźăăŽĺ¤ć
ăŠă ă ăĄă˝ăăă¨ăăŚĺéĄăăăĺźăăăżăźă˛ăăĺ (ăă¨ăă°ă Dim x = Function(a As Integer, b As Integer) a + b) ăăŞăăłăłăăăšăă§ĺ¤ă¨ăăŚĺĺéĄăăăĺ ´ĺăăžăăŻăżăźă˛ăăĺăăăŞă˛ăźăĺă§ăŻăŞăĺ ´ĺăçľćăŽĺźăŽĺăŻăŠă ă ăĄă˝ăăăŽăˇă°ăăăŁă¨ĺçăŽĺżĺăăŞă˛ăźăĺăŤăŞăăžăă ăăŽĺżĺăăŞă˛ăźăĺăŤăŻăäşćć§ăŽăăăăŞă˛ăźăĺă¸ăŽĺ¤ćăăăăžăăäşćć§ăŽăăăăŞă˛ăźăĺăŻăĺżĺăăŞă˛ăźăĺ㎠Invoke ăĄă˝ăăăăăŠăĄăźăżăźă¨ăăŚä˝żç¨ăăŚăăŞă˛ăźăä˝ćĺźă使ç¨ăăŚä˝ćă§ăăäťťćăŽăăŞă˛ăźăĺă§ăă äžăă°ćŹĄăćăăăăžăă
' Anonymous delegate type similar to Func(Of Object, Object, Object)
Dim x = Function(x, y) x + y
' OK because delegate type is compatible
Dim y As Func(Of Integer, Integer, Integer) = x
System.Delegateĺă¨System.MulticastDelegateĺčŞä˝ăŻăăŞă˛ăźăĺă¨ăŻčŚăŞăăăŞăăă¨ăŤćł¨ćăăŚăă ăă (ăăšăŚăŽăăŞă˛ăźăĺăăăŞă˛ăźăĺăăçśćżăăăŚăăĺ ´ĺă§ă)ă ăžăăĺżĺăăŞă˛ăźăĺăăäşćć§ăŽăăăăŞă˛ăźăĺă¸ăŽĺ¤ćăŻĺç
§ĺ¤ćă§ăŻăŞăăă¨ăŤćł¨ćăăŚăă ăăă
é ĺĺ¤ć
ĺç §ĺă§ăăă¨ăăäşĺŽăŤăăŁăŚé ĺă§ĺŽçžŠăăăĺ¤ćăŤĺ ăăŚăé ĺăŤăŻăăă¤ăăŽçšĺĽăŞĺ¤ćăĺĺ¨ăăžăă
Aă¨B㎠2 ă¤ăŽĺăŽĺ ´ĺă严ćšăŽĺç
§ĺăžăăŻĺăăŠăĄăźăżăźăĺ¤ĺă¨čŚăŞăăăăAăŤĺç
§ăé
ĺăăžăăŻĺăăŠăĄăźăżăźăBăŤĺ¤ćăăăŚăăĺ ´ĺăAĺăŽé
ĺăăĺăăŠăłăŻăćă¤BĺăŽé
ĺă¸ăŽĺ¤ćăĺĺ¨ăăžăă ăăŽăŞăŹăźăˇă§ăłăˇăăăŻă é
ĺĺ
ąĺćŁă¨ĺźă°ăăžăă é
ĺăŽĺ
ąĺćŁăŻăçšăŤăčŚç´ ĺă B é
ĺăŽčŚç´ ăăĺŽéăŤăŻčŚç´ ĺă Aé
ĺăŽčŚç´ ă§ăăĺŻč˝ć§ăăăăă¨ăćĺłăăžăăăă ăă A 㨠B ăŽä¸Ąćšăĺç
§ĺă§ăăă B ăĺç
§ĺ¤ćăžă㯠Aă¸ăŽé
ĺĺ¤ćăćăŁăŚăăĺ ´ĺă§ăă 揥ăŽäžă§ăŻăF㎠2 çŞçŽăŽĺźăłĺşăă§ăŻăbăŽĺŽéăŽčŚç´ ĺăObjectă§ăŻăŞăStringăăăăăăSystem.ArrayTypeMismatchExceptionäžĺ¤ăăšăăźăăăžăă
Module Test
Sub F(ByRef x As Object)
End Sub
Sub Main()
Dim a(10) As Object
Dim b() As Object = New String(10) {}
F(a(0)) ' OK.
F(b(1)) ' Not allowed: System.ArrayTypeMismatchException.
End Sub
End Module
é ĺăŽĺ ąĺćŁăŽăăăĺç §ĺé ĺăŽčŚç´ ă¸ăŽäťŁĺ ĽăŤăŻăé ĺčŚç´ ăŤĺ˛ăĺ˝ăŚăăăŚăăĺ¤ăĺŽéăŤč¨ąĺŻăăăĺă§ăăăă¨ă確čŞăăĺŽčĄćăă§ăăŻăĺŤăžăăžăă
Module Test
Sub Fill(array() As Object, index As Integer, count As Integer, _
value As Object)
Dim i As Integer
For i = index To (index + count) - 1
array(i) = value
Next i
End Sub
Sub Main()
Dim strings(100) As String
Fill(strings, 0, 101, "Undefined")
Fill(strings, 0, 10, Nothing)
Fill(strings, 91, 10, 0)
End Sub
End Module
ăăŽäžă§ăŻăăĄă˝ăăFillăŽarray(i)ă¸ăŽäťŁĺ
ĽăŤăŻăĺ¤ć°valueăŤăăŁăŚĺç
§ăăăăŞăă¸ă§ăŻăăNothingăăé
ĺarrayăŽĺŽéăŽčŚç´ ĺă¨äşćć§ăŽăăĺăŽă¤ăłăšăżăłăšă§ăăăă¨ă確čŞăăĺŽčĄćăă§ăăŻăćéťçăŤĺŤăžăăŚăăžăă ăĄă˝ăă Maină§ăŻăăĄă˝ăăăŽćĺ㎠2 ă¤ăŽĺźăłĺşăFillćĺăăžăăă3 çŞçŽăŽĺźăłĺşăă§ăŻăarray(i)ă¸ăŽćĺăŽĺ˛ăĺ˝ăŚăŽĺŽčĄćăŤSystem.ArrayTypeMismatchExceptionäžĺ¤ăăšăăźăăăžăă äžĺ¤ăŻă Integer ă String é
ĺăŤć źç´ă§ăăŞăăăăŤçşçăăžăă
é
ĺčŚç´ ĺ㎠1 ă¤ăĺăăŠăĄăźăżăźă§ăăăăăŽĺăĺŽčĄćăŤĺ¤ĺă§ăăăă¨ăĺ¤ćăăĺ ´ĺă System.InvalidCastException äžĺ¤ăăšăăźăăăžăă äžăă°ćŹĄăćăăăăžăă
Module Test
Sub F(Of T As U, U)(x() As T)
Dim y() As U = x
End Sub
Sub Main()
' F will throw an exception because Integer() cannot be
' converted to Object()
F(New Integer() { 1, 2, 3 })
End Sub
End Module
ăžăăĺćĺăŽé ĺă¨ăĺćĺăŽĺşăŤăŞăĺăŽé ĺăăžăăŻĺăĺşăŤăŞăĺăćă¤ĺĽăŽĺćĺăŽé ĺăŽéăŤăĺ¤ćăĺĺ¨ăăžăăăă ăăé ĺăŽăŠăłăŻăĺăă§ăăĺ ´ĺă§ăă
Enum Color As Byte
Red
Green
Blue
End Enum
Module Test
Sub Main()
Dim a(10) As Color
Dim b() As Integer
Dim c() As Byte
b = a ' Error: Integer is not the underlying type of Color
c = a ' OK
a = c ' OK
End Sub
End Module
ăăŽäžă§ăŻăColorăŽé
ĺăŻăColorăŽĺşăŤăŞăĺByteăŽé
ĺă¨ăŽéă§ĺ¤ćăăăžăă ăă ăăIntegerăŻColorăŽĺşăŤăŞăĺă§ăŻăŞăăăăIntegerăŽé
ĺă¸ăŽĺ¤ćăŻă¨ăŠăźăŤăŞăăžăă
A()ĺ㎠rank-1 é
ĺăŤăŻăSystem.Collections.Generică§čŚă¤ăăŁăăłăŹăŻăˇă§ăł ă¤ăłăżăźăă§ă¤ăšĺIList(Of B)ăIReadOnlyList(Of B)ăICollection(Of B)ăIReadOnlyCollection(Of B)ăIEnumerable(Of B)ă¸ăŽé
ĺĺ¤ćăĺŤăžăăžăă揥ăŽăăăăăĺ˝ăŚăŻăžăéăă§ăă
-
AăăăłBăŻăĺç §ĺăžăăŻĺ¤ĺă¨ăăŚçĽăăăŚăăŞăĺăăŠăĄăźăżăźăŽä¸Ąćšă§ăăăžăăAăŤăŻăćĄĺ¤§ĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăăBă¸ăŽĺ¤ćăăăăžăă -
AăăăłBăŻăăŠăĄăăĺăĺşăŤăŞăĺăŽĺćĺă§ăă -
Aă¨B㎠1 ă¤ăĺćĺă§ăăă 1 ă¤ăŻĺşăŤăŞăĺă§ăă
äťťćăŽăŠăłăŻăć㤠A ĺăŽé
ĺăŤăăSystem.Collectionsă§čŚă¤ăăŁăéă¸ă§ăăŞă㯠ăłăŹăŻăˇă§ăł ă¤ăłăżăźăă§ă¤ăšĺIListăICollectionăIEnumerableă¸ăŽé
ĺĺ¤ćăăăăžăă
For Eachă使ç¨ăăăăGetEnumerator ăĄă˝ăăăç´ćĽĺźăłĺşăăă¨ăŤăăŁăŚăçľćăŽă¤ăłăżăźăă§ă¤ăšăĺ垊ĺŚçă§ăăžăă rank-1 é
ĺăŽĺ ´ĺă IList ăžă㯠ICollectionăŽă¸ă§ăăŞăăŻăžăăŻéă¸ă§ăăŞăăŻĺ˝˘ĺźăŤĺ¤ćăăăă¤ăłăăăŻăšăŤăăŁăŚčŚç´ ăĺĺžăăăă¨ăă§ăăžăă
IListăŽă¸ă§ăăŞăăŻăžăăŻéă¸ă§ăăŞăăŻĺ˝˘ĺźăŤĺ¤ćăăăăŠăłăŻ 1 é
ĺăŽĺ ´ĺăŻăä¸č¨ă¨ĺăăŠăłăżă¤ă é
ĺĺ
ąĺćŁăă§ăăŻăŤĺžăŁăŚăă¤ăłăăăŻăšăŤăăŁăŚčŚç´ ăč¨ĺŽăăăă¨ăă§ăăžăă äťăŽăăšăŚăŽă¤ăłăżăźăă§ă¤ăš ăĄă˝ăăăŽĺä˝ăŻăVB č¨čŞäťć§ăŤăăŁăŚĺŽçžŠăăăŚăăžăăăăăăŻĺşăŤăŞăăŠăłăżă¤ă ăŤăăăăžăă
ĺ¤ĺăŽĺ¤ć
ĺ¤ĺăŽĺ¤ăŻăăăăŻăš ĺă¨ĺźă°ăăăăăťăšăéăăŚĺŽčŁ ăăăĺşćŹĺç §ĺăžăăŻă¤ăłăżăźăă§ă¤ăšĺăŽăăăăăŤĺ¤ćă§ăăžăă ĺ¤ĺăŽĺ¤ăăăăŻăšĺăăăă¨ăĺ¤ăŻ .NET Framework ăăźăăŤĺĺ¨ăăĺ ´ćăăăłăăźăăăžăă ăăŽĺžăăăźăä¸ăŽăăŽĺ ´ćă¸ăŽĺç §ăčżăăăĺç §ĺĺ¤ć°ăŤć źç´ă§ăăžăă ăăŽĺç §ăŻăĺ¤ĺ㎠ăăăŻăšĺăăă ă¤ăłăšăżăłăšă¨ăĺźă°ăăžăă ăăăŻăšĺăăăă¤ăłăšăżăłăšăŤăŻăĺ¤ĺă§ăŻăŞăĺç §ĺă¨ĺăăťăăłăăŁăŻăšăăăăžăă
ăăăŻăšĺăăăĺ¤ĺăŻă ăăăŻăšĺč§Łé¤ă¨ĺźă°ăăăăăťăšăéăăŚĺ
ăŽĺ¤ĺăŤćťăăă¨ăă§ăăžăă ăăăŻăšĺăăăĺ¤ĺăăăăŻăšĺč§Łé¤ăăăă¨ăĺ¤ăŻăăźăăăĺ¤ć°ăŽĺ ´ćăŤăłăăźăăăžăă ăăŽćçšăăăĺ¤ĺă§ăăăăŽăăăŤĺä˝ăăžăă ĺ¤ĺăŽăăăŻăšĺăč§Łé¤ăăĺ ´ĺăĺ¤ăŻ null ĺ¤ăžăăŻĺ¤ĺăŽă¤ăłăšăżăłăšă§ăăĺż
čŚăăăăžăă ăă䝼ĺ¤ăŽĺ ´ĺăŻă System.InvalidCastException äžĺ¤ăăšăăźăăăžăă ĺ¤ăĺćĺăŽă¤ăłăšăżăłăšă§ăăĺ ´ĺăăăŽĺ¤ăŻăĺćĺăŽĺşăŤăŞăĺăžăăŻĺăĺşăŤăŞăĺăćă¤ĺĽăŽĺćĺăŤăăăŻăšĺč§Łé¤ăăăă¨ăă§ăăžăă null ĺ¤ăŻăăŞăăŠăŤ Nothingă§ăăăăŽăăăŤćąăăăžăă
null 訹厚ĺ¤ĺăéŠĺăŤăľăăźăăăăăăŤă System.Nullable(Of T) ĺ¤ĺăŻăăăăŻăšĺă¨ăăăŻăšĺč§Łé¤ăčĄăă¨ăăŤçšĺĽăŤćąăăăžăă
Nullable(Of T)ĺăŽĺ¤ăăăăŻăšĺăăă¨ăĺ¤ăŽHasValueăăăăăŁăTrueăăăŚăăĺ ´ĺăŻTĺăŽăăăŻăšĺăăăĺ¤ăăĺ¤ăŽHasValueăăăăăŁăFalseĺ ´ĺăŻNothingăŽĺ¤ăŤăŞăăžăă
TĺăŽĺ¤ăăăăŻăšĺč§Łé¤ăăŚNullable(Of T)ăăă¨ăValue ăăăăăŁăăăăŻăšĺăăăĺ¤ă§ăăăHasValue ăăăăăŁăTrueNullable(Of T)ăŽă¤ăłăšăżăłăšăŤăŞăăžăă
Nothingĺ¤ăŻăäťťćăŽTăŤĺŻžăăŚNullable(Of T)ăăăăăŤăăăŻăšĺč§Łé¤ă§ăăHasValueăăăăăŁăFalseĺ¤ăŤăŞăăžăă ăăăŻăšĺăăăĺ¤ĺăŻĺç
§ĺă¨ĺć§ăŤĺä˝ăăăăăĺăĺ¤ă¸ăŽč¤ć°ăŽĺç
§ăä˝ćă§ăăžăă ăăŞăăăŁăĺă¨ĺćĺăŽĺ ´ĺăăăăăŽĺăŽă¤ăłăšăżăłăšăŻ ä¸ĺ¤ă§ăăăăăăăăŻé˘äżăăăžăăă ă¤ăžăăăăăăŽĺăŽăăăŻăšĺăăăă¤ăłăšăżăłăšăĺ¤ć´ăăăă¨ăŻă§ăăŞăăăăĺăĺ¤ă¸ăŽĺç
§ăč¤ć°ăăă¨ăăäşĺŽă茳ĺŻăăăă¨ăŻă§ăăžăăă
ä¸ćšăć§é ä˝ăŻăăăŽă¤ăłăšăżăłăšĺ¤ć°ăŤă˘ăŻăťăšă§ăăĺ ´ĺăăăăŽăĄă˝ăăăžăăŻăăăăăŁăăăŽă¤ăłăšăżăłăšĺ¤ć°ăĺ¤ć´ăăĺ ´ĺăŤĺ¤ć´ĺŻč˝ăŞĺ ´ĺăăăăžăă ăăăŻăšĺăăăć§é ä˝ă¸ăŽ 1 ă¤ăŽĺç
§ă使ç¨ăăŚć§é ăĺ¤ć´ăăă¨ăăăăŻăšĺăăăć§é ä˝ă¸ăŽăăšăŚăŽĺç
§ăŤĺ¤ć´ă襨示ăăăžăă ăăŽçľćăŻäşćăăŞăĺŻč˝ć§ăăăăăă Object ă¨ăăŚĺćĺŽăăăĺ¤ă 1 ă¤ăŽĺ ´ćăăĺĽăŽăăăŻăšĺăăăĺ¤ĺăŤăłăăźăăăă¨ăĺç
§ăăłăăźăăăăŽă§ăŻăŞăăăăźăä¸ă§čŞĺçăŤč¤čŁ˝ăăăžăă äžăă°ćŹĄăćăăăăžăă
Class Class1
Public Value As Integer = 0
End Class
Structure Struct1
Public Value As Integer
End Structure
Module Test
Sub Main()
Dim val1 As Object = New Struct1()
Dim val2 As Object = val1
val2.Value = 123
Dim ref1 As Object = New Class1()
Dim ref2 As Object = ref1
ref2.Value = 123
Console.WriteLine("Values: " & val1.Value & ", " & val2.Value)
Console.WriteLine("Refs: " & ref1.Value & ", " & ref2.Value)
End Sub
End Module
ăăă°ăŠă ăŽĺşĺăŻćŹĄăŽă¨ăăă§ăă
Values: 0, 123
Refs: 123, 123
ăăăŻăšĺăăăStruct1ăval2ăŤĺ˛ăĺ˝ăŚăăăă¨ăăŤĺ¤ăŽăłăăźăčĄăăăăăăăăźăŤăŤĺ¤ć°val2ăŽăăŁăźăŤăă¸ăŽäťŁĺ
ĽăŻăăăźăŤăŤĺ¤ć°val1ăŽăăŁăźăŤăăŤăŻĺ˝ąéżăăžăăă ăăăŤĺŻžăăĺ˛ăĺ˝ăŚ ref2.Value = 123 ăŻă ref1 ĺç
§ă¨ ref2 ĺç
§ăŽä¸ĄćšăŽăŞăă¸ă§ăŻăăŤĺ˝ąéżăăžăă
"注:
System.ValueTypeăŽé
ĺťśăă¤ăłăăă§ăăŞăăăăSystem.ValueTypeă¨ăăŚĺćĺŽăăăăăăŻăšĺăăăć§é ä˝ăŤĺŻžăăŚăŻăć§é ä˝ăŽăłăăźăŻčĄăăăžăăă
ĺ˛ăĺ˝ăŚćăŤăăăŻăšĺăăăĺ¤ĺăăłăăźăăăă¨ăăăŤăźăŤăŤăŻäžĺ¤ă 1 ă¤ăăăžăă ăăăŻăšĺăăăĺ¤ĺĺç §ăĺĽăŽĺĺ ăŤć źç´ăăăŚăăĺ ´ĺăĺ é¨ĺç §ăŻăłăăźăăăžăăă äžăă°ćŹĄăćăăăăžăă
Structure Struct1
Public Value As Object
End Structure
Module Test
Sub Main()
Dim val1 As Struct1
Dim val2 As Struct1
val1.Value = New Struct1()
val1.Value.Value = 10
val2 = val1
val2.Value.Value = 123
Console.WriteLine("Values: " & val1.Value.Value & ", " & _
val2.Value.Value)
End Sub
End Module
ăăă°ăŠă ăŽĺşĺăŻćŹĄăŽă¨ăăă§ăă
Values: 123, 123
ăăăŻăĺ¤ăŽăłăăźćăŤĺ
é¨ăăăŻăšĺăăăĺ¤ăăłăăźăăăŞăăăă§ăă ăăăăŁăŚă val1.Value 㨠val2.Value ăŽä¸ĄćšăŤăĺăăăăŻăšĺăăăĺ¤ĺă¸ăŽĺç
§ăăăăžăă
"注: ĺ
é¨ăăăŻăšĺăăăĺ¤ĺăăłăăźăăăŞăă¨ăăäşĺŽăŻă.NET ĺăˇăšăă ăŽĺśéă§ăăă¤ăžăă Object ĺăŽĺ¤ăăłăăźăăăăăłăŤăăăšăŚăŽĺ
é¨ăăăŻăšĺăăăĺ¤ĺăăłăăźăăăăăăŤăăăŤăŻăé常ăŤăłăšăăăăăăžăă
ĺčż°ăŽăăăŤăăăăŻăšĺăăăĺ¤ĺăŻĺ
ăŽĺăŤăŽăżăăăŻăšĺč§Łé¤ă§ăăžăă ăă ăăăăăŻăšĺăăăăăŞăăăŁăĺăŻă Objectă¨ăăŚĺćĺŽăăăĺ ´ĺăŤçšĺĽăŤćąăăăžăă ĺ¤ćĺ
ăŽäťăŽăăŞăăăŁăĺăŤĺ¤ćă§ăăžăă äžăă°ćŹĄăćăăăăžăă
Module Test
Sub Main()
Dim o As Object = 5
Dim b As Byte = CByte(o) ' Legal
Console.WriteLine(b) ' Prints 5
End Sub
End Module
é常ăăăăŻăšĺăăăIntegerĺ¤5Byteĺ¤ć°ăŤăăăŻăšĺč§Łé¤ă§ăăžăăă§ăăă ăă ăă Integer 㨠Byte ăŻăăŞăăăŁăĺă§ăăăĺ¤ćăăăăăăĺ¤ćăŻč¨ąĺŻăăăžăă
ĺ¤ĺăă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćăăăă¨ăŻăă¤ăłăżăźăă§ă¤ăšăŤĺśç´ăăăŚăăă¸ă§ăăŞăăŻĺźć°ă¨ăŻç°ăŞăăăăă¨ăŤćł¨ćăăŚăă ăăă ĺśç´äťăĺăăŠăĄăźăżăź (ăžă㯠Object ă§ăŽăĄă˝ăăăŽĺźăłĺşă) ă§ă¤ăłăżăźăă§ă¤ăš ăĄăłăăźăŤă˘ăŻăťăšăăĺ ´ĺăĺ¤ĺăă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćăăăă¤ăłăżăźăă§ă¤ăš ăĄăłăăźăŤă˘ăŻăťăšăăĺ ´ĺă¨ĺć§ăŤăăăŻăšĺăŻčĄăăăžăăă ăă¨ăă°ăă¤ăłăżăźăă§ă¤ăš ICounter ăŤăĺ¤ăŽĺ¤ć´ăŤä˝żç¨ă§ăăăĄă˝ăă Increment ăĺŤăžăăŚăăă¨ăăžăă
ICounterăĺśç´ă¨ăăŚä˝żç¨ăăă¨ăăăăŻăšĺăăăăłăăźă§ăŻăŞăăIncrementăĺźăłĺşăăăĺ¤ć°ă¸ăŽĺç
§ă使ç¨ăăŚăIncrement ăĄă˝ăăăŽĺŽčŁ
ăĺźăłĺşăăăžăă
Interface ICounter
Sub Increment()
ReadOnly Property Value() As Integer
End Interface
Structure Counter
Implements ICounter
Dim _value As Integer
Property Value() As Integer Implements ICounter.Value
Get
Return _value
End Get
End Property
Sub Increment() Implements ICounter.Increment
value += 1
End Sub
End Structure
Module Test
Sub Test(Of T As ICounter)(x As T)
Console.WriteLine(x.value)
x.Increment() ' Modify x
Console.WriteLine(x.value)
CType(x, ICounter).Increment() ' Modify boxed copy of x
Console.WriteLine(x.value)
End Sub
Sub Main()
Dim x As Counter
Test(x)
End Sub
End Module
IncrementăćĺăŤĺźăłĺşăă¨ăĺ¤ć°xăŽĺ¤ăĺ¤ć´ăăăžăă ăăăŻăăăăŻăšĺăăăIncrementăŽăłăăźăŽĺ¤ăĺ¤ć´ăăăx㎠2 ĺçŽăŽĺźăłĺşăă¨ĺăă§ăŻăăăžăăă ăăăăŁăŚăăăă°ăŠă ăŽĺşĺăŻćŹĄăŽăăăŤăŞăăžăă
0
1
1
Null 訹厚ĺ¤ĺĺ¤ć
Tĺ¤ĺăŻănull 訹厚ăăźă¸ă§ăłăŽĺ (T?) ă¨ăŽéă§ĺ¤ćă§ăăžăă
T? ăă T ă¸ăŽĺ¤ćă§ăŻăĺ¤ćăăăĺ¤ăNothingăăăĺ ´ĺăSystem.InvalidOperationExceptionäžĺ¤ăăšăăźăăăžăă ăžăăT?ăŤăŻăSă¸ăŽçľăżčžźăżĺ¤ćăăăĺ ´ĺTSĺă¸ăŽĺ¤ćăăăăžăă
Săĺ¤ĺăŽĺ ´ĺăŻăT?ă¨S?ăŽéăŤćŹĄăŽçľăżčžźăżĺ¤ćăĺĺ¨ăăžăă
ĺăĺéĄ (縎ĺ°ăžăăŻćĄĺ¤§) ă
T?ăăS?ăŤĺ¤ćăăžăăĺăĺéĄ (縎ĺ°ăžăăŻćĄĺ¤§) ă
TăăS?ăŤĺ¤ćăăžăăS?ăăTă¸ăŽç¸Žĺ°ĺ¤ćă
ăă¨ăă°ăçľăżčžźăżăŽćĄĺ¤§ĺ¤ćăŻăIntegerăăLongă¸ăŽçľăżčžźăżăŽćĄĺ¤§ĺ¤ćăĺĺ¨ăăăăăInteger?ăăLong?ăŤĺĺ¨ăăžăă
Dim i As Integer? = 10
Dim l As Long? = i
T?ăăS?ăŤĺ¤ćăăă¨ăăŤăT?ăŽĺ¤ăNothingĺ ´ĺăS?ăŽĺ¤ăNothingăăăžăă
S?ăăTăžăăŻT?ăăSăŤĺ¤ćăăă¨ăT?ăžăăŻS?ăŽĺ¤ăNothingăăăă¨ăSystem.InvalidCastExceptionäžĺ¤ăăšăăźăăăžăă
ĺşăŤăŞăĺ System.Nullable(Of T)ăŽĺä˝ăŽăăănull 訹厚ĺ¤ĺ T? ăăăŻăšĺăăăă¨ăçľć㯠TĺăŽăăăŻăšĺăăăĺ¤ăŤăŞăăžăă T?ĺăŽăăăŻăšĺăăăĺ¤ă§ăŻăăăžăăă éăŤănull 訹厚ĺ¤ĺ T?ăŤăăăŻăšĺč§Łé¤ăăă¨ăĺ¤ăŻ System.Nullable(Of T)ă§ăŠăăăăă Nothing 㯠T?ĺ㎠null ĺ¤ăŤăăăŻăšĺč§Łé¤ăăăžăă äžăă°ćŹĄăćăăăăžăă
Dim i1? As Integer = Nothing
Dim o1 As Object = i1
Console.WriteLine(o1 Is Nothing) ' Will print True
o1 = 10
i1 = CType(o1, Integer?)
Console.WriteLine(i1) ' Will print 10
ăăŽĺä˝ăŽĺŻä˝ç¨ăŻăĺ¤ĺăă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćăăăŤăŻĺăăăăŻăšĺăăĺż
čŚăăăăăănull 訹厚ĺ¤ĺT?TăŽăăšăŚăŽă¤ăłăżăźăă§ă¤ăšăĺŽčŁ
ăăŚăăăăăŤčŚăăă¨ăăăă¨ă§ăă ăăŽçľćă T? ăŻă T ĺ¤ćĺŻč˝ăŞăăšăŚăŽă¤ăłăżăźăă§ă¤ăšăŤĺ¤ćă§ăăžăă ăă ăănull 訹厚ĺ¤ĺ T? ă§ăŻăă¸ă§ăăŞăăŻĺśç´ăă§ăăŻăžăăŻăŞăăŹăŻăˇă§ăłăŽçŽçă§ T ăŽă¤ăłăżăźăă§ă¤ăšăĺŽéăŤăŻĺŽčŁ
ăăăŞăăă¨ăŤćł¨ćăăăă¨ăéčŚă§ăă äžăă°ćŹĄăćăăăăžăă
Interface I1
End Interface
Structure T1
Implements I1
...
End Structure
Module Test
Sub M1(Of T As I1)(ByVal x As T)
End Sub
Sub Main()
Dim x? As T1 = Nothing
Dim y As I1 = x ' Valid
M1(x) ' Error: x? does not satisfy I1 constraint
End Sub
End Module
ćĺĺĺ¤ć
CharăStringăŤĺ¤ćăăă¨ăćĺăŽćĺăćĺĺ¤ă§ăăćĺĺăŤăŞăăžăă
StringăCharăŤĺ¤ćăăă¨ăĺ¤ăćĺĺăŽćĺăŽćĺă§ăăćĺăŤăŞăăžăă
CharăŽé
ĺăStringăŤĺ¤ćăăă¨ăé
ĺăŽčŚç´ ă§ăăćĺăćă¤ćĺĺăä˝ćăăăžăă
StringăCharăŽé
ĺăŤĺ¤ćăăă¨ăčŚç´ ăćĺĺăŽćĺă§ăăćĺăŽé
ĺăä˝ćăăăžăă
Stringă¨BooleanăByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăSingleăDoubleăDateăăăăłăăŽéăŽéăŽćŁç˘şăŞĺ¤ćăŻăăăŽäťć§ăŽçŻĺ˛ĺ¤ă§ăăăĺŽčŁ
㯠1 ă¤ăŽčŠłç´°ăé¤ăăŚäžĺăăžăă ćĺĺĺ¤ćă§ăŻăĺŽčĄćç°ĺ˘ăŽçžĺ¨ăŽăŤăŤăăŁă常ăŤčć
Žăăăžăă ăăŽăăăĺŽčĄćăŤĺŽčĄăăĺż
čŚăăăăžăă
ćĄĺ¤§ĺ¤ć
ćĄĺ¤§ĺ¤ćăŻăŞăźăăźăăăźăăăă¨ăŻăăăžăăăă粞庌ă夹ăăăĺŻč˝ć§ăăăăžăă 揥ăŽĺ¤ćăŻćĄĺ¤§ĺ¤ćă§ăă
ID/ć˘ĺŽăŽĺ¤ć
ĺăăăăčŞä˝ă¸ă
ăŠă ă ăĄă˝ăăăŤĺŻžăăŚçćăăăĺżĺăăŞă˛ăźăĺăăăĺăăˇă°ăăăŁăćă¤äťťćăŽăăŞă˛ăźăĺăŤĺĺéĄăăžăă
ăŞăăŠăŤ
Nothingăăĺă¸ă
ć°ĺ¤ĺ¤ć
ByteăăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăSingleăăžăăŻDoubleăžă§ăSByteăăShortăIntegerăLongăDecimalăSingleăžăăŻDoubleăUShortăăUIntegerăIntegerăULongăLongăDecimalăSingleăăžăăŻDoubleăShortăăIntegerăLongăDecimalăSingleăăžăăŻDoubleăžă§ăUIntegerăăULongăLongăDecimalăSingleăăžăăŻDoubleăIntegerăăLongăDecimalăSingleăăžăăŻDoubleăžă§ăULongăăDecimalăSingleăăžăăŻDoubleăLongăăDecimalăSingleăăžăăŻDoubleăžă§ăDecimalăăSingleăžăăŻDoubleăSingleăăDoubleăăŞăăŠăŤ
0ăăĺćĺă¸ă (注ă0ăăäťťćăŽĺćĺă¸ăŽĺ¤ćăŻăăăŠă°ăŽăăšăăç°ĄçĽĺăăăăăŤćĄĺ¤§ăăăŚăăžăăăă¨ăă°ăValuesăĺ¤Oneăćă¤ĺćĺăŽĺ ´ĺăŻă(v And Values.One) = 0ă¨č¨ăŁăŚValuesĺăŽĺ¤ć°văăăšăă§ăăžă)ăĺćĺăăĺşăŤăŞăć°ĺ¤ĺăăžăăŻĺşăŤăŞăć°ĺ¤ĺăŽćĄĺ¤§ĺ¤ćăčĄăăăć°ĺ¤ĺă
ĺŽć°ĺźăŽĺ¤ăĺ¤ćĺ ăŽĺăŽçŻĺ˛ĺ ă§ăăă°ă
ULongăLongăUIntegerăIntegerăUShortăShortăByteăăžăăŻSByteĺăŽĺŽć°ĺźăăăăăçăĺăŤĺ¤ćăăăžăă (注ăUIntegerăžăăŻIntegerăăSingleăULongăăžăăŻLongăăSingleăžăăŻDoubleă¸ăŽĺ¤ćăăžăăŻDecimalăăSingleăžăăŻDoubleă¸ăŽĺ¤ćăŻă粞庌ăŽć夹ăĺźă辡ăăĺŻč˝ć§ăăăăžăăă大ăăă夹ăăăăă¨ăŻăăăžăăăäťăŽćĄĺ¤§ć°ĺ¤ĺ¤ćă§ăŻăć ĺ ąă夹ăăăăă¨ăŻăăăžăă)ă
ĺç §ĺ¤ć
ĺç §ĺăăĺşćŹĺă¸ă
ĺç §ĺăăă¤ăłăżăźăă§ă¤ăšĺăžă§(ĺăă¤ăłăżăźăă§ă¤ăšăžăăŻăăŞă˘ăłăäşćă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăŚăăĺ ´ĺ)ă
ă¤ăłăżăźăă§ă¤ăšăŽç¨ŽéĄăă
Objectăă¤ăłăżăźăă§ă¤ăšĺăăăăŞă˘ăłăäşćă¤ăłăżăźăă§ă¤ăšĺă¸ă
ăăŞă˛ăźăĺăăăăŞă˘ăłăäşćăăŞă˛ăźăĺă¸ă (注ă äťăŽĺ¤ăăŽĺç §ĺ¤ćăŻăăăăăŽčŚĺăŤăăŁăŚćéťçăŤç¤şăăăžăăăă¨ăă°ăĺżĺăăŞă˛ăźăăŻ
System.MulticastDelegateăăçśćżăăĺç §ĺă§ăăé ĺĺăŻSystem.Arrayăăçśćżăăĺç §ĺă§ăăĺżĺĺăŻSystem.Objectăăçśćżăăĺç §ĺă§ă)ă
ĺżĺăăŞă˛ăźăăŽĺ¤ć
- ăŠă ă ăĄă˝ăăăŤĺŻžăăŚçćăăăĺżĺăăŞă˛ăźăĺăăăăăĺşăăăŞă˛ăźăĺă¸ăŽĺĺéĄă
é ĺĺ¤ć
čŚç´ ĺ
Seăćă¤é ĺĺSăăăčŚç´ ĺTeăćă¤é ĺĺTăžă§ă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺăSă¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăăSeă¨TeăŻăŠăĄăăĺç §ĺă§ăăăăĺç §ĺă¨ĺźă°ăăĺăăŠăĄăźăżăźă§ăăćĄĺ¤§ĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăŻă
SeăăTeăŤĺĺ¨ăăžăă
ĺćăăăčŚç´ ĺăćă¤é ĺĺ
SăăăčŚç´ ĺTeăćă¤é ĺĺTăŤSeă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺăSă¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăăTeăŻăSeăŽĺşăŤăŞăĺă§ăă
ĺćăăăčŚç´ ĺ
Seăćă¤ăŠăłăŻ 1 ăŽé ĺĺSăăăSystem.Collections.Generic.IList(Of Te)ăIReadOnlyList(Of Te)ăICollection(Of Te)ăIReadOnlyCollection(Of Te)ăăăăłIEnumerable(Of Te)ăŤă揥ăŽăăăăăĺ˝ăŚăŻăžăĺ ´ĺăSeă¨TeăŽä¸Ąćšăĺç §ĺă§ăăăăĺç §ĺă§ăăăă¨ăçĽăăăŚăăĺăăŠăĄăźăżăźă§ăăăćĄĺ¤§ĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăŻăSeăăTeăŤĺĺ¨ăăžăăTeăŻăSeăŽĺşăŤăŞăĺă§ăăTeăŻćŹĄăŽăłăźăă¨ĺăă§ăăSe
ĺ¤ĺăŽĺ¤ć
ĺ¤ĺăăĺşćŹĺă¸ă
ĺ¤ĺăăăĺăĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšĺăžă§ă
Null 訹厚ĺ¤ĺăŽĺ¤ć
ĺ
TăăĺT?ăžă§ăĺ
T?ăăĺS?ăŤTăăĺSă¸ăŽćĄĺ¤§ĺ¤ćăăăăžăăĺ
TăăĺS?ăŤTăăĺSă¸ăŽćĄĺ¤§ĺ¤ćăăăăžăăĺ
T?ăăăĺTĺŽčŁ ăăă¤ăłăżăźăă§ă¤ăšĺăžă§ă
ćĺĺĺ¤ć
CharăăStringăChar()ăăStringă
ĺăăŠăĄăźăżăźăŽĺ¤ć
ĺăăŠăĄăźăżăźăă
ObjectăĺăăŠăĄăźăżăźăăă¤ăłăżăźăă§ă¤ăšĺĺśç´ăăžăăŻă¤ăłăżăźăă§ă¤ăšĺĺśç´ă¨äşćć§ăŽăăă¤ăłăżăźăă§ă¤ăšăăŞă˘ăłăăžă§ă
ĺăăŠăĄăźăżăźăăăăŻăŠăšĺśç´ăŤăăŁăŚĺŽčŁ ăăăă¤ăłăżăźăă§ă¤ăšăžă§ă
ĺăăŠăĄăźăżăźăăăăŻăŠăšĺśç´ăŤăăŁăŚĺŽčŁ ăăăă¤ăłăżăźăă§ă¤ăšă¨äşćć§ăŽăăă¤ăłăżăźăă§ă¤ăšăăŞă˘ăłăăžă§ă
ĺăăŠăĄăźăżăźăăăŻăŠăšĺśç´ăăžăăŻăŻăŠăšĺśç´ăŽĺşćŹĺă
ĺăăŠăĄăźăżăź
TăăĺăăŠăĄăźăżăźĺśç´TxăăžăăŻćĄĺ¤§ĺ¤ćTxä˝ăă
縎ĺ°ĺ¤ć
縎ĺ°ĺ¤ćă¨ăŻă常ăŤćĺăăăă¨ă訟ćă§ăăŞăĺ¤ćăć ĺ ąă夹ăăăĺŻč˝ć§ăçĽăăăŚăăĺ¤ćăăăăłç¸Žĺ°čĄ¨č¨ăŽăĄăŞăăăĺžăăăăŤĺĺăŤç°ăŞăĺăŽăăĄă¤ăłéăŽĺ¤ćă§ăă 揥ăŽĺ¤ćăŻç¸Žĺ°ĺ¤ćă¨ăăŚĺéĄăăăžăă
ăăźăŤĺĺ¤ć
BooleanăăByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăSingleăăžăăŻDoubleăžă§ăByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăSingleăăžăăŻDoubleăăBooleană
ć°ĺ¤ĺ¤ć
ByteăăSByteăSByteăăByteăUShortăUIntegerăžăăŻULongăUShortăăByteăSByteăăžăăŻShortăShortăăByteăSByteăUShortăUIntegerăăžăăŻULongăUIntegerăăByteăSByteăUShortăShortăăžăăŻIntegerăIntegerăăByteăSByteăUShortăShortăUIntegerăžăăŻULongăULongăăByteăSByteăUShortăShortăUIntegerăIntegerăăžăăŻLongăLongăăByteăSByteăUShortăShortăUIntegerăIntegerăăžăăŻULongăDecimalăăByteăSByteăUShortăShortăUIntegerăIntegerăULongăžăăŻLongăSingleăăByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăăžăăŻDecimalăžă§ăDoubleăăByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăăžăăŻSingleăžă§ăć°ĺ¤ĺăăĺćĺă¸ă
ĺćĺăăć°ĺ¤ĺăžă§ăĺşăŤăŞăć°ĺ¤ĺăŤăŻç¸Žĺ°ĺ¤ćăăăăžăă
ĺćăăăĺăăĺĽăŽĺćĺă¸ă
ĺç §ĺ¤ć
ĺç §ĺăăăăć´žçĺă¸ă
ăŻăŠăšĺăăă¤ăłăżăźăă§ă¤ăšĺăžă§ăăŻăŠăšĺăŤĺŻžĺżăăă¤ăłăżăźăă§ă¤ăšĺăžăăŻă¤ăłăżăźăă§ă¤ăšĺăăŞă˘ăłăăĺŽčŁ ăăăŚăăŞăĺ ´ĺă
ă¤ăłăżăźăă§ă¤ăšĺăăăŻăŠăšĺă¸ă
2 ă¤ăŽĺăŽéăŤçśćżé˘äżăăŞăăăăŞă˘ăłăäşćć§ăăŞăĺ ´ĺăŻăă¤ăłăżăźăă§ă¤ăšĺăăĺĽăŽă¤ăłăżăźăă§ă¤ăšĺă¸ă
ĺżĺăăŞă˛ăźăăŽĺ¤ć
- ăŠă ă ăĄă˝ăăăŤĺŻžăăŚçćăăăĺżĺăăŞă˛ăźăĺăăăăăçăăăŞă˛ăźăĺă¸ăŽĺĺéĄă
é ĺĺ¤ć
čŚç´ ĺ
Seăćă¤é ĺĺSăăăčŚç´ ĺTeăćă¤é ĺĺTăžă§ă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺă-
Să¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăă -
Seă¨TeăŽä¸Ąćšăĺç §ĺă§ăăăăĺ¤ĺă¨ăăŚčŞčăăăŚăăŞăĺăăŠăĄăźăżăźă§ăă - 縎ĺ°ĺç
§ăé
ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăŻă
SeăăTeăŤĺĺ¨ăăžăă
-
čŚç´ ĺ
Seăćă¤é ĺĺSăăăĺćăăăčŚç´ ĺTeăćă¤é ĺĺTăžă§ă揥ăŽăăšăŚăĺ˝ăŚăŻăžăĺ ´ĺă-
Să¨TăŻčŚç´ ăŽç¨ŽéĄă§ăŽăżç°ăŞăăžăă -
SeăŻTeăŽĺşăŤăŞăĺă§ăăăžăăŻă严ćšă¨ăĺăĺşăŤăŞăĺăĺ ąćăăç°ăŞăĺćĺă§ăă
-
ĺćăăăčŚç´ ĺ
SSeăćă¤ăŠăłăŻ 1 ăŽé ĺĺăăăIList(Of Te)ăIReadOnlyList(Of Te)ăICollection(Of Te)ăIReadOnlyCollection(Of Te)ăIEnumerable(Of Te)ăžă§ă揥ăŽăăăăăĺ˝ăŚăŻăžăĺ ´ĺă-
Seă¨TeăŽä¸Ąćšăĺç §ĺă§ăăăăĺç §ĺă§ăăăă¨ăçĽăăăŚăăĺăăŠăĄăźăżăźă§ăăăSeăăTeă¸ăŽç¸Žĺ°ĺç §ăé ĺăăžăăŻĺăăŠăĄăźăżăźăŽĺ¤ćăĺĺ¨ăăžăă -
SeăŻTeăŽĺşăŤăŞăĺă§ăăăžăăŻă严ćšă¨ăĺăĺşăŤăŞăĺăĺ ąćăăç°ăŞăĺćĺă§ăă
-
ĺ¤ĺăŽĺ¤ć
ĺç §ĺăăăăăć´žçăăĺ¤ĺă¸ă
ă¤ăłăżăźăă§ă¤ăšĺăăĺ¤ĺăžă§ăĺ¤ĺăă¤ăłăżăźăă§ă¤ăšĺăĺŽčŁ ăăĺ ´ĺă
Null 訹厚ĺ¤ĺăŽĺ¤ć
ĺ
T?ăăĺTăĺ
T?ăăĺS?ăŤTĺăăĺSă¸ăŽç¸Žĺ°ĺ¤ćăăăăžăăĺ
TăăĺS?ăŤTĺăăĺSă¸ăŽç¸Žĺ°ĺ¤ćăăăăžăăĺ
S?ăăĺTăŤĺ¤ćăăžăăĺSăăĺTă¸ăŽĺ¤ćăăăăžăă
ćĺĺĺ¤ć
StringăăCharăStringăăChar()ăStringăăBooleanăBooleanăăStringăžă§ăStringă¨ByteăSByteăUShortăShortăUIntegerăIntegerăULongăLongăDecimalăSingleăăžăăŻDoubleăŽéăŽĺ¤ćăStringăăDateăDateăăStringăžă§ă
ĺăăŠăĄăźăżăźăŽĺ¤ć
ObjectăăĺăăŠăĄăźăżăźă¸ăĺăăŠăĄăźăżăźăăă¤ăłăżăźăă§ă¤ăšĺăžă§ăĺăăŠăĄăźăżăźăăăŽă¤ăłăżăźăă§ă¤ăšăŤĺśç´ăăăŚăăŞăăăăăŽă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăăŻăŠăšăŤĺśç´ăăăŚăăŞăĺ ´ĺă
ă¤ăłăżăźăă§ă¤ăšĺăăĺăăŠăĄăźăżăźă¸ă
ĺăăŠăĄăźăżăźăăăŻăŠăšĺśç´ăŽć´žçĺă¸ă
ĺăăŠăĄăźăżăź
Tăăă縎ĺ°ĺ¤ćăćă¤ĺăăŠăĄăźăżăźĺśç´Txă
ĺăăŠăĄăźăżăźăŽĺ¤ć
ĺăăŠăĄăźăżăźăŽĺ¤ćăŻăĺśç´ (ĺĺ¨ăăĺ ´ĺ) ăŤăăŁăŚćąşĺŽăăăžăă
TĺăăŠăĄăźăżăźăŻă常ăŤăäťťćăŽă¤ăłăżăźăă§ă¤ăšĺă¨ăŽéă§ăObjectă¨ăŽéă§ăăăčŞä˝ăŤĺ¤ćă§ăăžăă
TĺăĺŽčĄćăŤĺ¤ĺă§ăăĺ ´ĺăTăăObjectăžăăŻă¤ăłăżăźăă§ă¤ăšĺă¸ăŽĺ¤ćăŻăăăŻăšĺĺ¤ćăŤăŞăăObjectăžăăŻă¤ăłăżăźăă§ă¤ăšĺăăTă¸ăŽĺ¤ćăŻăăăăŻăšĺč§Łé¤ĺ¤ćăŤăŞăăžăă ăŻăŠăšĺśç´ C ăćă¤ĺăăŠăĄăźăżăźăŻăĺăăŠăĄăźăżăźăă C ă¨ăăŽĺşĺşăŻăŠăšă¸ăŽčż˝ĺ ăŽĺ¤ćăĺŽçžŠăăžăăăăŽéăĺć§ă§ăă ĺăăŠăĄăźăżăźĺśç´ăćă¤ĺăăŠăĄăźăżăźTTxăTxă¸ăŽĺ¤ćă¨ĺ¤ćTxĺŽçžŠăăžăă
čŚç´ ĺăă¤ăłăżăźăă§ă¤ăšĺśç´ I ăćă¤ĺăăŠăĄăźăżăźă§ăăé
ĺăŻăčŚç´ ĺă Ié
ĺă¨ĺăĺ
ąĺ¤é
ĺĺ¤ćăćăĄăžăăăă ăăĺăăŠăĄăźăżăźăŤ Class ĺśç´ăžăăŻăŻăŠăšĺśç´ăăăĺ ´ĺ (ĺç
§é
ĺčŚç´ ĺăŽăżăĺ
ąĺ¤ăŤăŞăăă)ă čŚç´ ĺăăŻăŠăšĺśç´ăćă¤ĺăăŠăĄăźăżăźă§ăăé
ĺ C ăčŚç´ ĺă Cé
ĺă¨ĺăĺ
ąĺ¤é
ĺĺ¤ćăćă¤ă
ä¸č¨ăŽĺ¤ćčŚĺă§ăŻăĺśç´ăŽăŞăĺăăŠăĄăźăżăźăăéă¤ăłăżăźăă§ă¤ăšĺă¸ăŽĺ¤ćăŻč¨ąĺŻăăăžăăăăăăŻéŠăăšăĺŻč˝ć§ăăăăžăă ăăŽççąăŻăăăŽăăăŞĺ¤ćăŽăťăăłăăŁăŻăšăŤé˘ăă桡䚹ăé˛ăăăă§ăă ăă¨ăă°ă揥ăŽĺŽŁč¨ăčăăŚăżăžăăăă
Class X(Of T)
Public Shared Function F(t As T) As Long
Return CLng(t) ' Error, explicit conversion not permitted
End Function
End Class
TăăIntegeră¸ăŽĺ¤ćă訹ĺŻăăăŚăăĺ ´ĺăX(Of Integer).F(7)ăŻ7Lăčżăă¨ç°ĄĺăŤäşćłă§ăăžăă ăă ăăć°ĺ¤ĺ¤ćăŻăłăłăă¤ăŤćăŤĺăć°ĺ¤ă§ăăăă¨ăăăăŁăŚăăĺ ´ĺăŤăŽăżčć
Žăăăăăăčć
Žăăăžăăă ăťăăłăăŁăŻăšăć確ăŤăăăŤăŻăä¸č¨ăŽäžă䝣ăăăŤč¨čż°ăăĺż
čŚăăăăžăă
Class X(Of T)
Public Shared Function F(t As T) As Long
Return CLng(CObj(t)) ' OK, conversions permitted
End Function
End Class
User-Defined ĺ¤ć
çľăżčžźăżĺ¤ć ăŻč¨čŞăŤăăŁăŚĺŽçžŠăăăĺ¤ćă§ă (ă¤ăžăăăăŽäťć§ăŤč¨čźăăăŚăăžă)ă ăŚăźăśăźĺŽçžŠăŽĺ¤ć 㯠CType ćźçŽĺăăŞăźăăźăăźăăăăă¨ăŤăăŁăŚĺŽçžŠăăăžăă ĺéă§ĺ¤ćăăĺ ´ĺăçľăżčžźăżĺ¤ćăéŠç¨ăăăŞăĺ ´ĺăŻăăŚăźăśăźĺŽçžŠăŽĺ¤ćăčć
Žăăăžăă ă˝ăźăšă¨ăżăźă˛ăăăŽĺ㍠ćăĺşć ăŽăŚăźăśăźĺŽçžŠĺ¤ćăăăĺ ´ĺăŻăăŚăźăśăźĺŽçžŠĺ¤ćă使ç¨ăăăžăă ăă䝼ĺ¤ăŽĺ ´ĺăŻăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă ćăĺ
ˇä˝çăŞĺ¤ćăŻăăŞăăŠăłăăă˝ăźăšĺ㍠"ćăčżă" ăăŽă§ăăăçľćăŽĺăăżăźă˛ăăĺ㍠"ćăčżă" ĺ¤ćă§ăă 使ç¨ăăăŚăźăśăźĺŽçžŠĺ¤ćăćąşĺŽăăĺ ´ĺăŻăćăĺ
ˇä˝çăŞćĄĺ¤§ĺ¤ćă使ç¨ăăăžăăćĄĺ¤§ĺ¤ćăćăĺ
ˇä˝çă§ăŞăĺ ´ĺăŻăćăĺ
ˇä˝çăŞç¸Žĺ°ĺ¤ćă使ç¨ăăăžăă ćăĺ
ˇä˝çăŞç¸Žĺ°ĺ¤ćăăŞăĺ ´ĺăĺ¤ćăŻćŞĺŽçžŠă§ăăăăłăłăă¤ăŤćă¨ăŠăźăçşçăăžăă
揥ăŽăťăŻăˇă§ăłă§ăŻăćăĺ ˇä˝çăŞĺ¤ćăăŠăŽăăăŤćąşĺŽăăăăăŤă¤ăăŚčŞŹćăăžăă 揥ăŽç¨čŞă使ç¨ăăžăă
ĺAăăĺBă¸ăŽçľăżčžźăżăŽćĄĺ¤§ĺ¤ćăĺĺ¨ăăAăBăă¤ăłăżăźăă§ă¤ăšă§ăŞăĺ ´ĺăAăŻBă¨Bencompasses ăŤăăŁăŚĺ
ĺŤăăăžăAă
ä¸éŁăŽĺ㎠ä¸ă§ćăĺ ĺŤ ĺăŻăăťăăĺ ăŽäťăŽăăšăŚăŽĺăĺŤă 1 ă¤ăŽĺă§ăă äťăŽăăšăŚăŽĺăĺŤăĺă 1 ă¤ăăŞăĺ ´ĺăăťăăăŤăŻćăĺ ĺŤăăăĺăŻăăăžăăă ç´ćçăŤč¨ăă¨ăćăĺ ćŹçăŞĺăŻăăťăăĺ ㎠"ć大" ĺă§ăăă¤ăžăăäťăŽĺĺăćĄĺ¤§ĺ¤ćă§ĺ¤ćă§ăăĺă§ăă
ä¸éŁăŽĺ㎠ä¸ă§ćăĺ ĺŤăăă ĺăŻăăťăăĺ ăŽäťăŽăăšăŚăŽĺăŤĺŤăžăă 1 ă¤ăŽĺă§ăă äťăŽăăšăŚăŽĺ㍠1 ă¤ăŽĺăĺŤăžăăŚăăĺ ´ĺăăťăăăŤăŻćăĺ ĺŤăăăĺăŻăăăžăăă ç´ćçăŤč¨ăă°ăćăĺ ĺŤăăăĺăŻăăťăăĺ ㎠"ćĺ°" ĺă§ăăă¤ăžăă縎ĺ°ĺ¤ćăéăăŚäťăŽĺăŤĺ¤ćă§ăăĺă§ăă
ĺ T?ăŽăŚăźăśăźĺŽçžŠĺ¤ćĺčŁăĺéăăĺ ´ĺăŻă T ăŤăăŁăŚĺŽçžŠăăăăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă䝣ăăăŤä˝żç¨ăăăžăă ĺ¤ć寞蹥ăŽĺă null 訹厚ĺ¤ĺă§ăăĺ ´ĺăŻănull é訹厚ĺ¤ĺăŽăżăĺŤă TăŽăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăŽăăăăăč§Łé¤ăăăžăă
TăăSă¸ăŽĺ¤ććźçŽĺăŻăT?ăăS?ă¸ăŽĺ¤ćăŤăŞăăăăăĺż
čŚăŤĺżăăŚT?ăăTăŤĺ¤ćăăĺż
čŚăŤĺżăăŚăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăTăăSăŤčŠäžĄăăĺż
čŚăŤĺżăăŚSăS?ăŤĺ¤ćăăăă¨ăŤăăŁăŚčŠäžĄăăăžăă ăă ăăĺ¤ćăăăĺ¤ăNothingăŽĺ ´ĺăăŞăăăăăĺ¤ććźçŽĺăŻăS?ă¨ăăŚĺćĺŽNothingĺ¤ăŤç´ćĽĺ¤ćăăžăă äžăă°ćŹĄăćăăăăžăă
Structure S
...
End Structure
Structure T
Public Shared Widening Operator CType(ByVal v As T) As S
...
End Operator
End Structure
Module Test
Sub Main()
Dim x As T?
Dim y As S?
y = x ' Legal: y is still null
x = New T()
y = x ' Legal: Converts from T to S
End Sub
End Module
ĺ¤ćăč§Łćąşăăĺ ´ĺăăŚăźăśăźĺŽçžŠăŽĺ¤ććźçŽĺăŻăăŞăăăăăĺ¤ććźçŽĺăăă常ăŤĺŞĺ ăăăžăă äžăă°ćŹĄăćăăăăžăă
Structure S
...
End Structure
Structure T
Public Shared Widening Operator CType(ByVal v As T) As S
...
End Operator
Public Shared Widening Operator CType(ByVal v As T?) As S?
...
End Operator
End Structure
Module Test
Sub Main()
Dim x As T?
Dim y As S?
y = x ' Calls user-defined conversion, not lifted conversion
End Sub
End Module
ĺŽčĄćăŤăăŚăźăśăźĺŽçžŠăŽĺ¤ćăčŠäžĄăăăŤăŻăć大 3 ă¤ăŽćé ăĺż čŚăŞĺ ´ĺăăăăžăă
ćĺăŤăĺż čŚăŤĺżăăŚăĺ¤ăçľăżčžźăżĺ¤ćă使ç¨ăăŚă˝ăźăšĺăăăŞăăŠăłăĺăŤĺ¤ćăăăžăă
揥ăŤăăŚăźăśăźĺŽçžŠăŽĺ¤ćăĺźăłĺşăăăžăă
ćĺžăŤăĺż čŚăŤĺżăăŚăăŚăźăśăźĺŽçžŠĺ¤ćăŽçľćăçľăżčžźăżĺ¤ćă使ç¨ăăŚăżăźă˛ăăĺăŤĺ¤ćăăăžăă
ăŚăźăśăźĺŽçžŠĺ¤ćăŽčŠäžĄăŤăŻăč¤ć°ăŽăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺăĺŤăžăăăă¨ăŻăăăžăăă
ćăĺ ˇä˝çăŞćĄĺ¤§ĺ¤ć
2 ă¤ăŽĺéă§ćăĺ ˇä˝çăŞăŚăźăśăźĺŽçžŠćĄĺ¤§ĺ¤ććźçŽĺăćąşĺŽăăăŤăŻă揥ăŽćé ă使ç¨ăăžăă
ăžăăăăšăŚăŽĺčŁĺ¤ććźçŽĺăĺéăăăžăă ĺ¤ćĺčŁćźçŽĺăŻăă˝ăźăšĺăŽăăšăŚăŽăŚăźăśăźĺŽçžŠćĄĺ¤§ĺ¤ććźçŽĺă¨ăăżăźă˛ăăĺăŽăăšăŚăŽăŚăźăśăźĺŽçžŠćĄĺ¤§ĺ¤ććźçŽĺă§ăă
揥ăŤă芲ĺ˝ăăŞăĺ¤ććźçŽĺăăăšăŚăťăăăăĺé¤ăăăžăă ĺ¤ććźçŽĺăŻăă˝ăźăšĺăăăŞăăŠăłăĺă¸ăŽćĄĺźľĺ¤ććźçŽĺăçľăżčžźăžăăŚăăăćźçŽĺăŽçľćăăăżăźă˛ăăĺă¸ăŽçľăżčžźăżăŽćĄĺ¤§ĺ¤ććźçŽĺăăăĺ ´ĺăŤăă˝ăźăšĺă¨ăżăźă˛ăăĺăŤéŠç¨ă§ăăžăă 芲ĺ˝ăăĺ¤ććźçŽĺăăŞăĺ ´ĺăćăĺ ˇä˝çăŞćĄĺ¤§ĺ¤ćăŻăăăžăăă
揥ăŤăéŠç¨ĺŻč˝ăŞĺ¤ććźçŽĺăŽćăĺ ˇä˝çăŞă˝ăźăšăŽç¨ŽéĄăćąşĺŽăăăžăă
ĺ¤ććźçŽĺăŽăăăăăă˝ăźăšĺăăç´ćĽĺ¤ćăăĺ ´ĺăă˝ăźăšĺăŻćăĺ ˇä˝çăŞă˝ăźăšĺă§ăă
ăă䝼ĺ¤ăŽĺ ´ĺăćăĺ ˇä˝çăŞă˝ăźăšĺăŻăĺ¤ććźçŽĺăŽă˝ăźăšĺăŽçľăżĺăăăŽä¸ă§ćăĺ ĺŤăăăĺă§ăă ćăĺ ĺŤăăăĺăčŚă¤ăăăŞăĺ ´ĺăćăĺ ˇä˝çăŞćĄĺ¤§ĺ¤ćăŻăăăžăăă
揥ăŤăéŠç¨ĺŻč˝ăŞĺ¤ććźçŽĺăŽćăĺ ˇä˝çăŞăżăźă˛ăăĺăćąşĺŽăăăžăă
ĺ¤ććźçŽĺăŽăăăăăăżăźă˛ăăĺăŤç´ćĽĺ¤ćăăăĺ ´ĺăăżăźă˛ăăĺăŻćăĺ ˇä˝çăŞăżăźă˛ăăĺă§ăă
ăă䝼ĺ¤ăŽĺ ´ĺăćăĺ ˇä˝çăŞăżăźă˛ăăĺăŻăĺ¤ććźçŽĺăŽăżăźă˛ăăĺăŽçľăżĺăăăŽä¸ă§ćăĺ ćŹçăŞĺă§ăă ćăĺ ĺŤăăĺăčŚă¤ăăăŞăĺ ´ĺăŻăćăĺ ˇä˝çăŞćĄĺ¤§ĺ¤ćăŻăăăžăăă
揥ăŤă1 ă¤ăŽĺ¤ććźçŽĺăćăçšĺŽăŽă˝ăźăšĺăăćăçšĺŽăŽăżăźă˛ăăĺăŤĺ¤ćăăăĺ ´ĺăăăăćăĺ ˇä˝çăŞĺ¤ććźçŽĺăŤăŞăăžăă ăăŽăăăŞćźçŽĺăč¤ć°ĺĺ¨ăăĺ ´ĺăćăĺ ˇä˝çăŞćĄĺ¤§ĺ¤ćăŻăăăžăăă
ćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ć
2 ă¤ăŽĺéă§ćăĺ ˇä˝çăŞăŚăźăśăźĺŽçžŠăŽç¸Žĺ°ĺ¤ććźçŽĺăćąşĺŽăăăŤăŻă揥ăŽćé ă使ç¨ăăžăă
ăžăăăăšăŚăŽĺčŁĺ¤ććźçŽĺăĺéăăăžăă ĺ¤ćĺčŁćźçŽĺăŻăă˝ăźăšĺăŽăăšăŚăŽăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă¨ăăżăźă˛ăăĺăŽăăšăŚăŽăŚăźăśăźĺŽçžŠĺ¤ććźçŽĺă§ăă
揥ăŤă芲ĺ˝ăăŞăĺ¤ććźçŽĺăăăšăŚăťăăăăĺé¤ăăăžăă ĺ¤ććźçŽĺăŻăă˝ăźăšĺăăăŞăăŠăłăĺă¸ăŽçľăżčžźăżĺ¤ććźçŽĺăăăăćźçŽĺăŽçľćăăăżăźă˛ăăĺă¸ăŽçľăżčžźăżĺ¤ććźçŽĺăăăĺ ´ĺăŤăă˝ăźăšĺă¨ăżăźă˛ăăĺăŤéŠç¨ă§ăăžăă 芲ĺ˝ăăĺ¤ććźçŽĺăăŞăĺ ´ĺăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
揥ăŤăéŠç¨ĺŻč˝ăŞĺ¤ććźçŽĺăŽćăĺ ˇä˝çăŞă˝ăźăšăŽç¨ŽéĄăćąşĺŽăăăžăă
ĺ¤ććźçŽĺăŽăăăăăă˝ăźăšĺăăç´ćĽĺ¤ćăăĺ ´ĺăă˝ăźăšĺăŻćăĺ ˇä˝çăŞă˝ăźăšĺă§ăă
ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ććźçŽĺăŽăăăăăă˝ăźăšĺăĺŤăĺăăĺ¤ćăăăĺ ´ĺăćăĺ ˇä˝çăŞă˝ăźăšĺăŻăăăăăŽĺ¤ććźçŽĺăŽçľĺăăăă˝ăźăšĺăŽăťăăăŽä¸ă§ćăĺ ĺŤĺăŤăŞăăžăă ćăĺ ĺŤăăăĺăčŚă¤ăăăŞăĺ ´ĺăŻăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
ăă䝼ĺ¤ăŽĺ ´ĺăćăĺ ˇä˝çăŞă˝ăźăšĺăŻăĺ¤ććźçŽĺăŽă˝ăźăšĺăŽçľăżĺăăăŽä¸ă§ćăĺ ćŹçăŞĺă§ăă ćăĺ ĺŤăăĺăčŚă¤ăăăŞăĺ ´ĺăŻăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
揥ăŤăéŠç¨ĺŻč˝ăŞĺ¤ććźçŽĺăŽćăĺ ˇä˝çăŞăżăźă˛ăăĺăćąşĺŽăăăžăă
ĺ¤ććźçŽĺăŽăăăăăăżăźă˛ăăĺăŤç´ćĽĺ¤ćăăăĺ ´ĺăăżăźă˛ăăĺăŻćăĺ ˇä˝çăŞăżăźă˛ăăĺă§ăă
ăă䝼ĺ¤ăŽĺ ´ĺăĺ¤ććźçŽĺăŽăăăăăăżăźă˛ăăĺăŤĺŤăžăăĺăŤĺ¤ćăăăĺ ´ĺăćăĺ ˇä˝çăŞăżăźă˛ăăĺăŻăăăăăŽĺ¤ććźçŽĺăŽçľĺăăăă˝ăźăšĺăŽăťăăăŽä¸ă§ćăĺ ĺŤĺăŤăŞăăžăă ćăĺ ĺŤăăĺăčŚă¤ăăăŞăĺ ´ĺăŻăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
ăă䝼ĺ¤ăŽĺ ´ĺăćăĺ ˇä˝çăŞăżăźă˛ăăĺăŻăĺ¤ććźçŽĺăŽăżăźă˛ăăĺăŽçľăżĺăăăŽä¸ă§ćăĺ ĺŤăăăĺă§ăă ćăĺ ĺŤăăăĺăčŚă¤ăăăŞăĺ ´ĺăŻăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
揥ăŤă1 ă¤ăŽĺ¤ććźçŽĺăćăçšĺŽăŽă˝ăźăšĺăăćăçšĺŽăŽăżăźă˛ăăĺăŤĺ¤ćăăăĺ ´ĺăăăăćăĺ ˇä˝çăŞĺ¤ććźçŽĺăŤăŞăăžăă ăăŽăăăŞćźçŽĺăč¤ć°ĺĺ¨ăăĺ ´ĺăćăĺ ˇä˝çăŞç¸Žĺ°ĺ¤ćăŻăăăžăăă
ăă¤ăăŁăĺ¤ć
ä¸é¨ăŽĺ¤ćăŻă.NET Framework ă§ăă¤ăăŁăăŤăľăăźăăăăŚăăăăăăă¤ăăŁă ĺ¤ć ă¨ăăŚĺéĄăăăžăă ăăăăŽĺ¤ćăŻă DirectCast ăăăł TryCast ĺ¤ććźçŽĺăăăăłăăŽäťăŽçšćŽăŞĺä˝ă使ç¨ăăŚćéŠĺă§ăăĺ¤ćă§ăă ăă¤ăăŁăĺ¤ćă¨ăăŚĺéĄăăăĺ¤ćăŻăID ĺ¤ćăć˘ĺŽăŽĺ¤ćăĺç
§ĺ¤ćăé
ĺĺ¤ćăĺ¤ĺĺ¤ćăĺăăŠăĄăźăżăźĺ¤ćă§ăă
ăăăăłăĺ
ĺăŽăťăăăćĺŽăăă¨ăĺ¤ăăŽĺ ´ĺăăťăă㎠丝čŚăŞ ĺăćąşĺŽăăăăăŤĺăŽć¨čŤăŞăŠăŽçśćłă§ĺż čŚăŤăŞăăžăă ĺăŽăťăăăŽä¸ťčŚăŞĺăŻăćĺ㍠1 ă¤äťĽä¸ăŽäťăŽĺăćéťçăŞĺ¤ćăćăăŞăĺăĺé¤ăăăă¨ăŤăăŁăŚćąşĺŽăăăžăă ăăŽćçšă§ĺăćŽăŁăŚăăŞăĺ ´ĺă丝čŚăŞĺăŻăăăžăăă ăăŽĺžă丝čŚăŞĺăŻăćŽăăŽĺăŽä¸ă§ćăĺ ĺŤăăăžăă ćăĺ ĺŤăăăŚăăĺăč¤ć°ăăĺ ´ĺă丝ăŞĺăŻăăăžăăă
Visual Basic language spec