プロシージャのオーバーロード (Visual Basic)
プロシージャの "オーバーロード" は、同じ名前と異なるパラメーター リストを使用して、複数のバージョンでプロシージャを定義することを意味します。 オーバーロードの目的は、名前で区別する必要なく、プロシージャの密接に関連する複数のバージョンを定義することです。 これを行うには、異なるパラメーター リストを使用します。
オーバーロードのルール
プロシージャをオーバーロードするときは、次のルールが適用されます。
同じ名前: 各オーバーロードされたバージョンでは、同じプロシージャ名を使用する必要があります。
異なるシグネチャ: 各オーバーロードされたバージョンは、次の項目の少なくとも 1 つが、他のすべてのオーバーロードされたバージョンと異なる必要があります。
パラメーターの数
パラメーターの順序
パラメーターのデータ型
型パラメーターの数 (ジェネリック プロシージャの場合)
戻り値の型 (変換演算子の場合のみ)
プロシージャ名と組み合わされた上記の項目を総称して、プロシージャの "シグネチャ" と呼びます。 オーバーロードされたプロシージャを呼び出すと、コンパイラはシグネチャを使用して、その呼び出しが定義と正しく一致することを確認します。
シグネチャに含まれない項目: シグネチャを変えずにプロシージャをオーバーロードすることはできません。 具体的には、次の 1 つ以上の項目が異なるだけでは、プロシージャをオーバーロードすることはできません。
プロシージャ修飾子キーワード (
Public
、Shared
、Static
など)パラメーター名または型パラメーター名
型パラメーターの制約 (ジェネリック プロシージャの場合)
パラメーター修飾子キーワード (
ByRef
やOptional
など)値を返すかどうか
戻り値のデータ型 (変換演算子を除く)
上記の一覧の項目は、シグネチャには含まれません。 これらを使用してオーバーロードされたバージョンを区別することはできませんが、シグネチャによって適切に区別されているオーバーロードされたバージョン間でこれらを変えることは可能です。
遅延バインディングされた引数: 遅延バインディングされたオブジェクト変数をオーバーロードされたバージョンに渡す場合は、適切なパラメーターを Object として宣言する必要があります。
プロシージャの複数のバージョン
顧客の残高に対してトランザクションを転記する Sub
プロシージャを作成し、名前または口座番号で顧客を参照できるようにするとします。 これに対応するために、次の例のように、2 つの異なる Sub
プロシージャを定義できます。
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
オーバーロードされたバージョン
別の方法として、単一のプロシージャ名をオーバーロードします。 次のように、Overloads キーワードを使用して、パラメーター リストごとにプロシージャのバージョンを定義できます。
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
追加のオーバーロード
取引金額を Decimal
または Single
で受け入れることも必要な場合は、post
をさらにオーバーロードしてこのバリエーションに対応できます。 前の例の各オーバーロードに対してこれを行う場合、すべて同じ名前で 4 つの異なるシグネチャを持つ 4 つの Sub
プロシージャを作成します。
オーバーロードの利点
プロシージャをオーバーロードする利点は、呼び出しの柔軟性にあります。 前の例で宣言された post
プロシージャを使用する場合、呼び出し元のコードで String
または Integer
として顧客 ID を取得し、どちらの場合も同じプロシージャを呼び出すことができます。 次に例を示します。
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
関連項目
.NET