プロシージャに 1 つ以上の 省略可能 なパラメーターがある場合、暗黙的なオーバーロードのいずれかに一致するオーバーロードされたバージョンを定義することはできません。 詳細については、「 プロシージャのオーバーロードに関する考慮事項」の「省略可能なパラメーターの暗黙的なオーバーロード」を参照してください。
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 つの省略可能なパラメーターがあり、呼び出し元のコードが互いに独立してそれぞれを指定または省略できる場合は、4 つのオーバーロードされたバージョンが必要です。1 つは、指定された引数の可能な組み合わせごとに 1 つです。
省略可能なパラメーターの数が増えると、オーバーロードの複雑さが増します。 指定された引数の一部の組み合わせが許容できない場合を除き、N 個の省略可能なパラメーターには、2 ^ N 個のオーバーロードされたバージョンが必要です。 プロシージャの性質によっては、ロジックを明確にすることで、オーバーロードされたすべてのバージョンを定義する余分な作業が正当化される場合があります。
複数の省略可能なパラメーターを受け取るプロシージャをオーバーロードするには
プロシージャのロジックで許容できる、指定された省略可能な引数の組み合わせを決定します。 省略可能なパラメーターが別のパラメーターに依存している場合は、許容できない組み合わせが発生する可能性があります。 たとえば、あるパラメーターが人の名前を受け入れ、別のパラメーターがユーザーの年齢を受け入れる場合、年齢を指定するが名前を省略する引数の組み合わせは許容できません。
指定された省略可能な引数の使用可能な組み合わせごとに、対応するパラメーター リストを定義する
Sub
またはFunction
宣言ステートメントを記述します。Optional
キーワードは使用しないでください。各宣言で、
Sub
キーワードまたはFunction
キーワードの前に Overloads キーワードを付けます。各宣言の後に、呼び出し元のコードがその宣言のパラメーター リストに対応する引数リストを提供するときに実行するプロシージャ コードを記述します。
必要に応じて、
End Sub
またはEnd Function
ステートメントで各プロシージャを終了します。
こちらも参照ください
- 手順
- プロシージャのパラメーターと引数
- 省略可能なパラメーター
- パラメーター配列
- プロシージャのオーバーロード
- トラブルシューティングの手順
- 方法: プロシージャ の複数のバージョンを定義する
- 方法: オーバーロードされたプロシージャ を呼び出す
- 方法: 無限の数のパラメーターを受け取るプロシージャをオーバーロード
- オーバーロードの解決
.NET