依位置和名稱傳遞引數 (Visual Basic)
呼叫 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 語言版本。
依名稱提供引數的限制
您無法藉由依名稱傳遞引數來避免輸入必要的引數。 您只能省略選擇性引數。
您無法依名稱傳遞參數陣列。 這是因為呼叫程序時,您為參數陣列提供了不確定數量的逗號分隔引數,而編譯器無法讓多個引數和單一名稱產生關聯。