直播中
向?qū)?/P>
將 Currency 數(shù)據(jù)類(lèi)型轉(zhuǎn)換為 Decimal,因此以下代碼:
Dim x As Currency
升級(jí)后將變?yōu)椋?/P>
Dim x As Decimal
Date
Visual
Basic 6.0 Date 變量在內(nèi)部以 Double 格式存儲(chǔ),能夠作為 Double 類(lèi)型的變量操作。
Date 變量存儲(chǔ)為 IEEE 64 位浮點(diǎn)數(shù),表示從 100 年 1 月 1 日到 9999 年 12 月 31 日的日期和從 0:00:00 到 23:59:59 的時(shí)間。任何可識(shí)別的文字日期都可以指定為 Date 變量。
當(dāng)其他數(shù)字類(lèi)型轉(zhuǎn)換為 Date 時(shí),小數(shù)點(diǎn)左邊的值表示日期信息,而小數(shù)點(diǎn)右邊的值表示時(shí)間信息。午夜為 0,正午為 0.5。整個(gè)數(shù)值為負(fù)表示 1899 年 12 月 30 日之前的日期。
Visual Basic.NET
Date 在內(nèi)部存儲(chǔ)為 64 位整數(shù),因此無(wú)法直接作為 Double 進(jìn)行操作。.NET 框架提供了 ToOADate 和 FromOADate 函數(shù)以進(jìn)行 Double 和 Date 之間的轉(zhuǎn)換。將日期表示為整數(shù)形式可以簡(jiǎn)化并加速對(duì)日期的操作。
升級(jí)
向?qū)?/P>
升級(jí)工具并非能夠檢測(cè)到所有使用變量將 Date 存儲(chǔ)為 Double 的情況,但它一般會(huì)在將 Double 指定為 Date 的位置插入適當(dāng)?shù)?ToOADate 或 FromOADate 方法。例如,以下代碼:
Dim dbl As Double Dim dat As Date Dbl = dat
升級(jí)后將變?yōu)椋?/P>
Dim dbl As Double Dim dat As Date Dbl = dat.ToOADate
定長(zhǎng)字符串
Visual
Basic 6.0 除類(lèi)模塊的 Public 變量之外,其他變量均可以聲明為定長(zhǎng)字符串。
Visual Basic.NET
CLR 第一版不支持定長(zhǎng)字符串。在后續(xù)版本中將添加這一支持功能。
升級(jí)
向?qū)?/P>
在大多數(shù)情況下不會(huì)出現(xiàn)問(wèn)題。假設(shè)為定長(zhǎng)字符串表現(xiàn)方式,則以下代碼:
Dim MyFixedLengthString As String * 100
升級(jí)后將變?yōu)椋?/P>
Dim MyFixedLengthString As New VB6.FixedLengthString(100)
有關(guān)該主題的全面說(shuō)明,請(qǐng)參閱白皮書(shū)《準(zhǔn)備將 Visual Basic 6.0 應(yīng)用程序升級(jí)到 Visual Basic.NET》(英文)。
Type
Visual
Basic 6.0
Type 語(yǔ)句用于定義由用戶(hù)定義的數(shù)據(jù)類(lèi)型。
Visual Basic.NET
Type 和 User-Defined Type 這兩個(gè)名稱(chēng)會(huì)引起混淆,因?yàn)轭?lèi)、枚舉和接口也是可以由用戶(hù)定義的類(lèi)型。Type 和 User-Defined Type 是從 QuickBasic 遺留下來(lái)的,在 QuickBasic 中用戶(hù)可以定義的類(lèi)型只有結(jié)構(gòu)和記錄。CLR 使用 Type 這一名稱(chēng)廣義地包含所有數(shù)據(jù)類(lèi)型。
因此,在 Visual Basic.NET 中 Type 語(yǔ)句將變?yōu)?Structure。
升級(jí)
向?qū)?/P>
將 Type 語(yǔ)句變?yōu)?Structure,因此以下代碼:
Type MyType MyVariable As Integer End Type
升級(jí)后將變?yōu)椋?/P>
Structure MyType Dim MyVariable As Short End Structure
用戶(hù)定義類(lèi)型存儲(chǔ)
Visual
Basic 6.0 用戶(hù)定義的數(shù)據(jù)類(lèi)型可以包含某種數(shù)據(jù)類(lèi)型、數(shù)組或先前定義的用戶(hù)定義類(lèi)型的一個(gè)或多個(gè)元素。在 Visual Basic 6.0 中,它們存儲(chǔ)在連續(xù)的內(nèi)存塊中。
Visual Basic.NET
格式是最有效的。它可能位于一段連續(xù)的內(nèi)存,也可能不。結(jié)構(gòu)可以被標(biāo)記為封送處理屬性,以確保能夠作為連續(xù)內(nèi)存塊傳遞到 COM 組件。
升級(jí)
向?qū)?/P>
在所有需要添加封送處理屬性的位置,API 均標(biāo)記有 TODO 注釋。(屬性不是自動(dòng)添加的,只有將結(jié)構(gòu)傳遞到 API 時(shí)才需要它們。)
True
Visual
Basic 6.0 True 的值為 -1。
Visual Basic.NET
True 的值為 1。
鑒于語(yǔ)言的協(xié)同操作,需要一種適用于所有語(yǔ)言的一致表示法。
升級(jí)
向?qū)?/P>
如果將布爾值強(qiáng)制轉(zhuǎn)換為非布爾值,代碼將標(biāo)記有升級(jí)警告。例如,以下代碼:
Dim MyBoolean As BooleanDim MyInteger As Integer MyInteger = MyBoolean
升級(jí)后將變?yōu)椋?/P>
Dim MyBoolean As BooleanDim MyInteger As Short ' UPGRADE_WARNING: Boolean MyBoolean is being converted into a numeric MyInteger = MyBoolean
Empty
Visual
Basic 6.0 變量均初始化為 Empty,當(dāng)用于數(shù)值表達(dá)式時(shí),變量將自動(dòng)轉(zhuǎn)換為零,當(dāng)用于字符串表達(dá)式時(shí),則自動(dòng)轉(zhuǎn)換為空字符串。
Visual Basic.NET
對(duì)象變量均初始化為 Nothing,當(dāng)用于數(shù)值表達(dá)式時(shí),變量將自動(dòng)轉(zhuǎn)換為零,當(dāng)用于字符串表達(dá)式時(shí),將自動(dòng)轉(zhuǎn)換為空字符串。使用 Nothing 代替特殊的 Empty 值可以降低語(yǔ)言的復(fù)雜性,語(yǔ)言協(xié)同操作性也更強(qiáng)。
升級(jí)向?qū)?/P>
Null 和 Null 傳播
Visual
Basic 6.0 Null 值為 Variant 的子類(lèi)型,表示變量不包含有效數(shù)據(jù)。Null 值通過(guò)表達(dá)式和函數(shù)“傳播”。如果表達(dá)式的任一部分為 Null,則整個(gè)表達(dá)式為 Null。將 Null 作為參數(shù)傳遞給大多數(shù)函數(shù)時(shí),這些函數(shù)也將返回 Null。
Visual Basic.NET
不支持 Null 傳播。使用 ADO.NET 對(duì)數(shù)據(jù)進(jìn)行編程的模型用于在檢索字段的值之前先檢查字段的值是否為 Null。包含 null 的變量將作為 DBNull 類(lèi)型的對(duì)象封送處理至 CLR。
Visual Basic.NET 處理 Null 時(shí)更加直接:字符串函數(shù)(例如 Left())總是返回字符串,與您的預(yù)期一樣。
升級(jí)
向?qū)?/P>
Null 值和 IsNull 函數(shù)標(biāo)記有升級(jí)警告注釋。例如,以下代碼:
If x Is Null Then MsgBox "Null"
升級(jí)后將變?yōu)椋?/P>
' UPGRADE_WARNING: Use of IsNull() detected If IsDBNull(x) Then MsgBox "Null"
Def<Type>
Visual
Basic 6.0 DefBool、DefByte、DefInt、DefLng、DefCur、DefSng、DefDbl、DefDec、DefDate、DefStr、DefObj 和 DefVar 語(yǔ)句用于在模塊級(jí)設(shè)置變量、參數(shù)和過(guò)程返回類(lèi)型(以指定字符開(kāi)始)的默認(rèn)數(shù)據(jù)類(lèi)型。
Visual Basic.NET
避免使用隱式類(lèi)型聲明,提高了代碼的可讀性和可靠性。
升級(jí)
向?qū)?/P>
將變量類(lèi)型的顯式聲明插入代碼。例如,以下代碼:
DefStr a-z
Sub MySub
s = "Hello"
End Sub
升級(jí)后將變?yōu)椋?/P>
Sub MySub
Dim s As String
s = "Hello"
End Sub
塊內(nèi)的局部變量
Visual
Basic 6.0 從包含聲明的行至過(guò)程結(jié)束的范圍內(nèi),局部變量均可見(jiàn)。
Visual Basic.NET
Visual Basic.NET 支持變量的塊范圍。這意味著從包含聲明的行開(kāi)始,至出現(xiàn)聲明的塊結(jié)束,局部變量均可見(jiàn)。例如:
Sub Test(x As Integer)
If x < 0 Then
Dim y As Integer = - x
'...
Else
'...
End If
End Sub
以上示例中的變量 y 僅在聲明該變量的塊中可用;更確切地說(shuō),它僅在其聲明至 Else 語(yǔ)句之間可用。如果需要在整個(gè)過(guò)程中使用變量,則必須在 If/Else/End If 控制結(jié)構(gòu)之外聲明該變量。
變量的塊范圍是許多結(jié)構(gòu)語(yǔ)言共有的功能。過(guò)程局部變量允許定義過(guò)程內(nèi)部變量,從而對(duì)結(jié)構(gòu)化編程提供支持,與此類(lèi)似,塊級(jí)別變量允許定義代碼塊內(nèi)部變量,從而對(duì)結(jié)構(gòu)化分解提供支持。
升級(jí)
向?qū)?/P>
如果變量在塊內(nèi)聲明,變量將自動(dòng)移至模塊級(jí)范圍。例如,以下代碼:
If x =1 Then
Dim y As Integer
End If
升級(jí)后將變?yōu)椋?/P>
Dim y As Integer
If x =1 Then
End If
新的自動(dòng)重新實(shí)例化
Visual
Basic 6.0 窗體的類(lèi)變量聲明 Dim x As New <classname> 將導(dǎo)致編譯器每次引用 x 時(shí)生成代碼。此代碼檢查 x 是否為 Nothing;如果是 Nothing,則創(chuàng)建類(lèi)的新實(shí)例。例如,以下代碼:
Dim x As New MyClass
'...
Call x.MyMethod()
等同于:
Dim x As MyClass
'...
If x Is Nothing Then
Set x = New MyClass
End If
Call x.MyMethod()
即使變量已經(jīng)設(shè)置為 Nothing,在下一次調(diào)用時(shí)該變量仍將重新實(shí)例化。
Visual Basic.NET
窗體的變量聲明 Dim x As New <classname> 等同于 Dim x As <classname> = New <classname>。引用通過(guò)此語(yǔ)法聲明的變量不會(huì)生成特殊代碼。
Visual Basic.NET 聲明 As New 比 Visual Basic 6.0 中的同一聲明更加有效。大多數(shù)對(duì)這類(lèi)變量的引用不需要額外的開(kāi)銷(xiāo)。而且,Visual Basic 6.0 的“自動(dòng)實(shí)例化”行為對(duì)于發(fā)現(xiàn)它的許多編程人員來(lái)說(shuō)非常古怪。
升級(jí)
向?qū)?/P>
這極少會(huì)成為問(wèn)題。但是,如果代碼嘗試使用已設(shè)置為 Nothing 的類(lèi),將導(dǎo)致運(yùn)行時(shí)異常。該異常很容易檢測(cè)到。然后,可以方便地修改代碼以實(shí)例化類(lèi)的新版本,如下例所示:
Dim x As New MyClass
x = Nothing
x = New MyClass
對(duì)象終結(jié)
Visual
Basic 6.0 COM 引用計(jì)數(shù)機(jī)制用于垃圾回收對(duì)象實(shí)例。如果對(duì)象不在循環(huán)中,當(dāng)對(duì)象不再使用,引用計(jì)數(shù)會(huì)立即檢測(cè)到此情況,并且運(yùn)行終結(jié)代碼。
Visual Basic.NET
跟蹤垃圾回收器從存儲(chǔ)在堆棧變量、模塊變量和共享變量中的可及引用開(kāi)始,將對(duì)象過(guò)一遍。此跟蹤進(jìn)程作為后臺(tái)任務(wù)運(yùn)行,因此在指向?qū)ο蟮淖詈笠粋€(gè)引用結(jié)束和添加新引用之間有一個(gè)不定的時(shí)間段。
在某些情況下,客戶(hù)端確實(shí)需要能夠強(qiáng)制某一對(duì)象釋放資源。CLR 規(guī)定這樣的對(duì)象應(yīng)當(dāng)實(shí)現(xiàn) IDisposable 接口,這就提供了 Dispose 方法。當(dāng)客戶(hù)端結(jié)束對(duì)具有 Dispose 方法的對(duì)象的使用時(shí),它可以顯式調(diào)用 Dispose 方法以釋放其資源。例如,包裝數(shù)據(jù)庫(kù)連接的對(duì)象應(yīng)當(dāng)公開(kāi) Dispose 方法。
跟蹤垃圾回收器能夠正確釋放引用循環(huán)中的對(duì)象。此外,跟蹤垃圾回收器的性能比引用計(jì)數(shù)要好得多。
升級(jí)
向?qū)?/P>
在大多數(shù)情況下,這一改變不會(huì)導(dǎo)致問(wèn)題。如果您的代碼中使用了資源句柄開(kāi)放(連接或文件句柄),則必須顯式關(guān)閉此句柄。此問(wèn)題易于檢測(cè)并會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。
數(shù)組
Visual
Basic 6.0 數(shù)組可以由任何整數(shù)數(shù)字的上下限限定。如果在聲明中未指定下限,將使用 Option Base 語(yǔ)句確定默認(rèn)下限。
Visual Basic.NET
為了與其他語(yǔ)言協(xié)同操作,所有數(shù)組的下限均必須為零。這樣就不再需要 Option Base 語(yǔ)句。
升級(jí)
向?qū)?/P>
ReDim
Visual
Basic 6.0 Visual Basic 6.0 中的固定大小數(shù)組和不定大小數(shù)組有所區(qū)別。固定大小數(shù)組通過(guò) Dim 語(yǔ)句聲明,在此語(yǔ)句包括此聲明中的數(shù)組界限。動(dòng)態(tài)數(shù)組在 Dim 語(yǔ)句中聲明,不指定界限信息。在使用動(dòng)態(tài)數(shù)組之前,需要通過(guò) ReDim 語(yǔ)句重新標(biāo)注動(dòng)態(tài)數(shù)組。在 Visual Basic 6.0 中,ReDim 語(yǔ)句提供了在單個(gè)語(yǔ)句中為動(dòng)態(tài)數(shù)組聲明和分配空間的快捷方法。ReDim 語(yǔ)句是 Visual Basic 6.0 中唯一能夠同時(shí)聲明和初始化變量的語(yǔ)句。
Visual Basic.NET
ReDim 語(yǔ)句僅用于為數(shù)組分配或重新分配空間,而不能用于重新分配數(shù)組。這是因?yàn)?Visual Basic.NET 中的所有數(shù)組均是動(dòng)態(tài)的,在 Visual Basic.NET 中 Dim 語(yǔ)句既可用于聲明動(dòng)態(tài)數(shù)組,又可用于初始化動(dòng)態(tài)數(shù)組。
由于所有變量聲明均可聲明變量并指定變量的初始值,使用 ReDim 同時(shí)聲明和初始化變量就變得多余和不必要了。只需要 Dim 語(yǔ)句聲明變量使語(yǔ)言更加簡(jiǎn)單、一致性更高。
升級(jí)
向?qū)?/P>
如果 ReDim() 用于聲明數(shù)組,在代碼中會(huì)自動(dòng)插入相應(yīng)的聲明。但是,最好的方法是您自己先在數(shù)組中插入 Dim 語(yǔ)句,因?yàn)槭褂?ReDim 聲明數(shù)組需要升級(jí)工具來(lái)推斷正確的聲明。使用 ReDim 也產(chǎn)生了不便處理的代碼,因?yàn)閿?shù)組在兩處進(jìn)行了同一聲明。
賦值
Visual
Basic 6.0 賦值形式有兩種:Let 賦值(默認(rèn))和 Set 賦值。用 Set 語(yǔ)句為 cn 賦值。
Visual Basic.NET
僅有一種賦值形式。x = y 意味著將變量或?qū)傩?y 的值賦給變量或?qū)傩?x。對(duì)象類(lèi)型變量的值是對(duì)對(duì)象實(shí)例的引用,因此如果 x 和 y 是引用類(lèi)型的變量,將執(zhí)行引用賦值。這種單一形式的賦值減少了語(yǔ)言的復(fù)雜性,并使代碼可讀性更強(qiáng)。
升級(jí)向?qū)?/P>
刪除 Set 和 Let 語(yǔ)句。解析強(qiáng)類(lèi)型對(duì)象的默認(rèn)屬性,并將屬性顯式添加到代碼中。
有關(guān)該主題的全面說(shuō)明,請(qǐng)參閱白皮書(shū)《準(zhǔn)備將 Visual Basic 6.0 應(yīng)用程序升級(jí)到 Visual Basic.NET》(英文)。
And、Or、Xor 和 Not
Visual
Basic 6.0 And、Or、Xor 和 Not 運(yùn)算符可以執(zhí)行邏輯運(yùn)算或位運(yùn)算(取決于表達(dá)式)。
Visual Basic.NET
And、Or 和 Xor 僅適用于布爾型。對(duì)于 And 和 Or 運(yùn)算符,如果第一個(gè)運(yùn)算數(shù)的值足以確定運(yùn)算符的結(jié)果,則運(yùn)算符將簡(jiǎn)化計(jì)算。新的運(yùn)算符 BitOr、BitAnd 和 BitXor 均用于位邏輯運(yùn)算。Bitxxx 運(yùn)算符不具有簡(jiǎn)化作用。
升級(jí)
向?qū)?/P>
如果 And/Or 語(yǔ)句是非布爾型或者包含函數(shù)、方法或?qū)傩?,此語(yǔ)句將升級(jí)為使用兼容性函數(shù),與 Visual Basic 6.0 中的表現(xiàn)形式相同。如果 And/Or 語(yǔ)句是布爾型,此語(yǔ)句將升級(jí)為使用本地 Visual Basic.Net 語(yǔ)句。
有關(guān)該主題的全面說(shuō)明,請(qǐng)參閱白皮書(shū)《準(zhǔn)備將 Visual Basic 6.0 應(yīng)用程序升級(jí)到 Visual Basic.NET》(英文)。
運(yùn)算符優(yōu)先級(jí)
Visual
Basic 6.0 邏輯和位的 And、Or、Xor 和 Not 運(yùn)算符的優(yōu)先級(jí)高于比較運(yùn)算符。
Visual Basic.NET
And、Or、Xor 和 Not 運(yùn)算符的優(yōu)先級(jí)低于比較運(yùn)算符,因此 a > b And a < c 將被認(rèn)為是 (a > b) And (a < c)。新的 BitAnd、BitOr 和 BitXor 運(yùn)算符的優(yōu)先級(jí)高于比較運(yùn)算符,因此 a BitAnd &HFFFF <> 0 將被認(rèn)為是 ((a BitAnd &HFFFF) <> 0)。
由于 BitAnd、BitOr 和 BitNot 運(yùn)算符可以返回?cái)?shù)值結(jié)果,因此其優(yōu)先級(jí)高于關(guān)系運(yùn)算符,這樣,就允許這三個(gè)運(yùn)算符返回的結(jié)果與其他值進(jìn)行比較。
升級(jí)
向?qū)?/P>
由升級(jí)向?qū)幚?。有關(guān)該主題的全面說(shuō)明,請(qǐng)參閱白皮書(shū)《準(zhǔn)備將 Visual Basic 6.0 應(yīng)用程序升級(jí)到 Visual Basic.NET》(英文)。
調(diào)用過(guò)程
Visual
Basic 6.0 支持兩種類(lèi)型的過(guò)程調(diào)用:一種使用 Call 語(yǔ)句,要求使用括號(hào)括住參數(shù)列表;另一種不使用 Call 語(yǔ)句,不能使用括號(hào)來(lái)括住參數(shù)列表。
在 Visual Basic 6.0 中的一種常見(jiàn)情況是,開(kāi)發(fā)者調(diào)用的過(guò)程不使用關(guān)鍵字,而又在參數(shù)列表外使用括號(hào)。幸運(yùn)的是,當(dāng)有一個(gè)以上的參數(shù)時(shí),編譯器會(huì)將其作為語(yǔ)法錯(cuò)誤檢測(cè)出來(lái)。但是,當(dāng)僅有一個(gè)參數(shù)時(shí),單一參數(shù)外的括號(hào)會(huì)將參數(shù)變量傳遞為 ByVal 而不是 ByRef。這會(huì)導(dǎo)致難以找到的小錯(cuò)誤。
Visual Basic.NET
在所有情況下參數(shù)列表均需要使用括號(hào)。
升級(jí)向?qū)?/P>
為沒(méi)有使用括號(hào)的過(guò)程調(diào)用插入括號(hào)。
靜態(tài)過(guò)程
Visual
Basic 6.0 通過(guò) Static 關(guān)鍵字可以聲明過(guò)程,此關(guān)鍵字表明在調(diào)用之間保留過(guò)程的局部變量。
Visual Basic.NET
在過(guò)程中不支持 Static 關(guān)鍵字,并且所有的靜態(tài)局部變量均需通過(guò) Static 語(yǔ)句顯式聲明。
需要將過(guò)程中的所有變量均聲明為靜態(tài)的情況很少。刪除此功能簡(jiǎn)化了語(yǔ)言,并且提高了可讀性,因?yàn)榫植孔兞靠偸俏挥诙褩V?,除非已顯式聲明為 Static。
升級(jí)
向?qū)?/P>
如果過(guò)程標(biāo)記為 Static,則所有的局部變量均變?yōu)?Static。
參數(shù)的 ByVal/ByRef 默認(rèn)值
Visual
Basic 6.0 參數(shù)未指定其默認(rèn)值為 ByVal 或 ByRef 時(shí),其默認(rèn)值為 ByRef。
Visual Basic.NET
<參數(shù)未指定其默認(rèn)值為 ByVal 或 ByRef 時(shí),其默認(rèn)值為 ByVal。
將參數(shù)默認(rèn)值指定為 ByVal 而不指定為 ByRef,可以避免過(guò)程錯(cuò)誤地修改由調(diào)用方傳遞的變量。這也使得默認(rèn)的調(diào)用規(guī)則與賦值一致,以便參數(shù)有效地綁定至表達(dá)式(通過(guò)表達(dá)式賦值為正式參數(shù))。
請(qǐng)用戶(hù)注意避免由 Visual Basic 6.0 升級(jí)到 Visual Basic.NET 帶來(lái)的混亂。如果用戶(hù)輸入的參數(shù)聲明未顯式指定其默認(rèn)值為 ByVal 或 ByRef,IDE 將為其自動(dòng)添加 ByVal 關(guān)鍵字。
升級(jí)
向?qū)?/P>
為沒(méi)有指定 ByVal 或 ByRef 為默認(rèn)值的參數(shù)添加 ByRef。
IsMissing 參數(shù)和可選參數(shù)
Visual
Basic 6.0 沒(méi)有默認(rèn)值的可選 Variant 參數(shù)將被初始化為特殊的錯(cuò)誤代碼,此錯(cuò)誤代碼可以由 IsMissing 函數(shù)檢測(cè)出來(lái)。
Visual Basic.NET
在 Visual Basic.NET 中要求所有的可選參數(shù)均指定默認(rèn)值。這樣可以減少語(yǔ)言中特殊值的數(shù)量,從而簡(jiǎn)化語(yǔ)言。
升級(jí)
向?qū)?/P>
IsMissing 函數(shù)由 IsNothing 函數(shù)代替,并且標(biāo)記有升級(jí)警告注釋。
ParamArray 參數(shù)
Visual
Basic 6.0 當(dāng)變量傳遞給 ParamArray 參數(shù)時(shí),可以通過(guò)被調(diào)用的函數(shù)修改。不支持 ByVal ParamArray 元素。
Visual Basic.NET
當(dāng)變量傳遞給 ParamArray 參數(shù)時(shí),不能通過(guò)被調(diào)用的函數(shù)修改。不支持 ByRef ParamArray 元素。
ParamArray 參數(shù)最常見(jiàn)的情況是不修改傳遞給此參數(shù)的變量。不支持 ByRef ParamArray 參數(shù)簡(jiǎn)化了 ParamArray 調(diào)用規(guī)則,因?yàn)?ParamArray 參數(shù)將被指定為正常數(shù)組。這樣,ParamArray 參數(shù)可以擴(kuò)展到任何元素類(lèi)型,同時(shí)需要 ParamArray 參數(shù)的函數(shù)均可通過(guò)數(shù)組(而不是參數(shù)列表)直接調(diào)用。