當您呼叫 Sub
或 Function
程式時,您可以 依位置 來傳遞自變數,以程式定義中出現的順序,或者您可以 依名稱傳遞自變數,而不考慮位置。
當您依名稱傳遞自變數時,您可以指定自變數的宣告名稱,後面接著冒號和等號 (:=
),後面接著自變數值。 您可以依任何順序使用具名參數。
例如,下列 Sub
程式採用三個自變數:
Public Class StudentInfo
Shared Sub Display(name As String,
Optional age As Short = 0,
Optional birth As Date = #1/1/2000#)
Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
End Sub
End Class
當您呼叫此程式時,您可以依位置、依名稱或使用兩者的混合來提供自變數。
依位置傳遞參數
您可以呼叫 Display
方法,其自變數會依位置傳遞,並以逗號分隔,如下列範例所示:
StudentInfo.Display("Mary", 19, #9/21/1998#)
如果您在位置自變數清單中省略選擇性自變數,則必須以逗號保留其位置。 下列範例呼叫 Display
方法時未傳入 age
參數:
StudentInfo.Display("Mary",, #9/21/1998#)
依名稱傳遞參數
或者,您可以使用以名稱傳遞的自變數進行呼叫 Display
,並以逗號分隔,如下列範例所示:
StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")
以這種方式通過名稱傳遞參數,在您呼叫具有多個選用引數的程序時會特別有用。 如果您依名稱提供自變數,則不需要使用連續逗號來表示遺漏的位置自變數。 依名稱傳遞自變數也可讓您更輕鬆地追蹤您傳遞的自變數,以及要省略哪些自變數。
依位置和名稱混合自變數
您可以在單一過程呼叫中依位置和名稱提供自變數,如下列範例所示:
StudentInfo.Display("Mary", birth:=#9/21/1998#)
在上述範例中,不需要額外的逗號來保留省略 age
自變數的位置,因為 birth
會以名稱傳遞。
在 15.5 之前的 Visual Basic 版本中,當您以位置與名稱的混合提供自變數時,位置自變數必須全部先行。 一旦您依名稱提供自變數,所有剩餘的自變數都必須以名稱傳遞。 例如,以下對 Display
方法的呼叫會顯示編譯錯誤 BC30241 :預期具名參數 。
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
從 Visual Basic 15.5 開始,只要最後的位置參數保持在正確的位置,位置參數就可以跟在具名參數之後。 如果在 Visual Basic 15.5 下編譯,則先前對 Display
方法的呼叫會順利編譯,且不再產生編譯程式錯誤 BC30241。
當您想要使用具名自變數讓程式代碼更容易閱讀時,以任何順序混合和比對具名和位置自變數的功能特別有用。 例如,下列 Person
類別建構函式需要兩個 型 Person
別的自變數,這兩個自變數可以是 Nothing
。
Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)
當father
和 mother
參數的值為 Nothing
時,使用混合具名和位置參數有助於讓程式碼的意圖更為清楚:
Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)
若要遵循具有具名自變數的位置自變數,您必須將下列元素新增至 Visual Basic 專案 (*.vbproj) 檔案:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
如需詳細資訊,請參閱 設定Visual Basic語言版本。
按名稱提供參數的限制
您無法依名稱傳遞自變數,以避免輸入必要的自變數。 您可以只省略選擇性參數。
您無法依名稱傳遞參數陣列。 這是因為當您呼叫程式時,會為參數陣列提供無限數目的逗號分隔自變數,而且編譯程式無法將多個自變數與單一名稱產生關聯。