Sub
またはFunction
プロシージャを呼び出すときは、プロシージャの定義に表示される順序で、位置によって引数を渡すか、位置に関係なく名前で渡すことができます。
引数を名前で渡す場合は、引数の宣言された名前の後にコロンと等号 (:=
)、その後に引数の値を指定します。 名前付き引数は任意の順序で指定できます。
たとえば、次の Sub
プロシージャは 3 つの引数を受け取ります。
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")
この方法で引数を名前で渡すことは、複数の省略可能な引数を持つプロシージャを呼び出す場合に特に便利です。 名前で引数を指定する場合、位置指定引数が見つからないことを示すために連続するコンマを使用する必要はありません。 名前で引数を渡すと、渡す引数と省略する引数を追跡しやすくなります。
位置と名前による引数の混在
次の例に示すように、1 つのプロシージャ呼び出しで位置と名前の両方で引数を指定できます。
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
型の 2 つの引数が必要であり、どちらも 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 言語バージョンの設定を参照してください。
名前による引数の指定に関する制限事項
必要な引数を入力しないように、名前で引数を渡すことはできません。 省略可能な引数のみを省略できます。
パラメーター配列を名前で渡すことはできません。 これは、プロシージャを呼び出すときに、パラメーター配列に無期限のコンマ区切り引数を指定し、コンパイラが複数の引数を 1 つの名前に関連付けることができないためです。
こちらも参照ください
.NET