依位置和名稱傳遞引數 (Visual Basic)

呼叫 SubFunction 程序時,您可以依位置 (程序定義中出現的順序) 傳遞引數,也可以依名稱傳遞,而不考慮位置。

依名稱傳遞引數時,您可以指定引數的宣告名稱,後面接著冒號和等號 (:=),再接著引數值。 您可以依任何順序提供具名引數。

例如,下列 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)

fathermother 引數的值為 Nothing 時,混用具名和位置引數有助於讓程式碼的意圖清楚:

Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)

若要在位置引數後接著具名引數,您必須將下列元素新增至 Visual Basic 專案檔 (*.vbproj):

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

如需詳細資訊,請參閱設定 Visual Basic 語言版本

依名稱提供引數的限制

您無法藉由依名稱傳遞引數來避免輸入必要的引數。 您只能省略選擇性引數。

您無法依名稱傳遞參數陣列。 這是因為呼叫程序時,您為參數陣列提供了不確定數量的逗號分隔引數,而編譯器無法讓多個引數和單一名稱產生關聯。

另請參閱