方法 : 省略可能なパラメータを受け取るプロシージャをオーバーロードする
更新 : 2007 年 11 月
プロシージャに 1 つ以上の Optional (Visual Basic) パラメータがある場合、いずれかの暗黙のオーバーロードに対応するオーバーロードされたバージョンを定義することはできません。詳細については、「プロシージャのオーバーロードに関する注意事項」の「省略可能なパラメータの暗黙のオーバーロード」を参照してください。
省略可能なパラメータが 1 つの場合
省略可能なパラメータを 1 つ取るプロシージャをオーバーロードするには
パラメータ リストに省略可能なパラメータを含む Sub または Function の宣言ステートメントを記述します。このオーバーロードされたバージョンでは Optional キーワードを使用しないでください。
Sub または Function キーワードの前に Overloads キーワードを指定します。
呼び出し元のコードが省略可能な引数を渡してきた場合に実行するプロシージャ コードを記述します。
状況に応じて End Sub ステートメントか End Function ステートメントでプロシージャを終了します。
2 つ目の宣言ステートメントは、パラメータ リストに省略可能なパラメータを含めず、その他は最初の宣言と同じように記述します。
呼び出し元のコードが省略可能な引数を渡さなかった場合に実行するプロシージャ コードを記述します。状況に応じて End Sub ステートメントか End Function ステートメントでプロシージャを終了します。
次の例では、省略可能なパラメータを使用するよう定義されたプロシージャ、オーバーロードされた同等の 2 つのプロシージャ、そして最後に、無効なオーバーロードされたバージョンと有効なオーバーロードされたバージョンを示します。
Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads. ' Overloads Sub q(ByVal b As Byte) ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use. ' Overloads Sub q(ByVal c As Byte, ByVal k As Long) ' The following overload uses a different signature and is valid. Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
省略可能なパラメータが複数ある場合
省略可能なパラメータが複数あるパラメータの場合、通常は 2 つ以上のオーバーロードされたバージョンが必要です。たとえば、省略可能なパラメータが 2 つあり、呼び出し元のコードがいずれかのパラメータを渡すか渡さないかを、もう 1 つのパラメータの有無に関係なく決める場合、オーバーロードされたバージョンは 4 つ (渡される引数の組み合わせの数) 必要です。
省略可能なパラメータの数が増えると、オーバーロードはより複雑になります。渡される引数の組み合わせの中にあり得ないものはないとすると、省略可能なパラメータの数が N のとき、オーバーロードされたバージョンは 2 ^ N 個必要です。オーバーロードされたバージョンをすべて定義する意味があるかどうかは、プロシージャの性質によって判断します。
省略可能なパラメータを複数取るプロシージャをオーバーロードするには
省略可能な引数を、どのような組み合わせで受け取ることができるかをプロシージャのロジックから判断します。1 つの省略可能なパラメータが、他の省略可能なパラメータに依存している場合、受け入れられない組み合わせが出てくることがあります。たとえば、配偶者の名前を受け取るパラメータと、配偶者の年齢を受け取るパラメータがある場合、年齢は含まれるが名前が含まれない組み合わせは受け入れられません。
省略可能な引数の、受け入れ可能な組み合わせそれぞれに対し、対応するパラメータ リストを定義する Sub または Function 宣言ステートメントを記述します。Optional キーワードは使用しないでください。
各定義では、Sub または Function キーワードの前に Overloads キーワードを指定します。
各宣言に続いて、呼び出し元のコードが、宣言のパラメータ リストに対応する引数のリストを渡してきた場合に実行するプロシージャ コードを記述します。
状況に応じて End Sub ステートメントか End Function ステートメントで各プロシージャを終了します。
参照
処理手順
方法 : 不特定数のパラメータを受け取るプロシージャをオーバーロードする