次の方法で共有


プロシージャのオーバーロード (Visual Basic)

プロシージャをオーバーロードする ということは、同じ名前と異なるパラメーター リストを使用して、複数のバージョンで定義することを意味します。 オーバーロードの目的は、プロシージャを名前で区別することなく、いくつかの密接に関連するバージョンを定義することです。 これを行うには、パラメーター リストを変更します。

ルールのオーバーロード

プロシージャをオーバーロードすると、次の規則が適用されます。

  • 同じ名前。 オーバーロードされた各バージョンでは、同じプロシージャ名を使用する必要があります。

  • 異なる署名。 オーバーロードされた各バージョンは、次に示す少なくとも 1 つの点で、他のすべてのオーバーロードされたバージョンとは異なる必要があります。

    • パラメーターの数

    • パラメーターの順序

    • パラメーターのデータ型

    • 型パラメーターの数 (ジェネリック プロシージャの場合)

    • 戻り値の型 (変換演算子の場合のみ)

    上記の項目は、プロシージャ名と共に、プロシージャの シグネチャ と総称されます。 オーバーロードされたプロシージャを呼び出すと、コンパイラはシグネチャを使用して、呼び出しが定義と正しく一致することを確認します。

  • 署名の一部ではない項目。 シグネチャを変更せずにプロシージャをオーバーロードすることはできません。 特に、次の項目を 1 つ以上変更するだけでプロシージャをオーバーロードすることはできません。

    • プロシージャ修飾子キーワード ( PublicShared、および Static

    • パラメーター名または型パラメーター名

    • 型パラメーター制約 (ジェネリック プロシージャの場合)

    • パラメーター修飾子キーワード ( ByRefOptional

    • 値を返すかどうか

    • 戻り値のデータ型 (変換演算子を除く)

    上記の一覧の項目は、署名の一部ではありません。 オーバーロードされたバージョンを区別するためにそれらを使用することはできませんが、シグネチャによって適切に区別されるオーバーロードされたバージョン間でそれらを変更できます。

  • Late-Bound 引数。 遅延バインドされたオブジェクト変数をオーバーロードされたバージョンに渡す場合は、適切なパラメーターを 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 つの Sub プロシージャがあり、すべて同じ名前で 4 つの異なるシグネチャを持つことになります。

オーバーロードの利点

プロシージャをオーバーロードする利点は、呼び出しの柔軟性にあります。 前の例で宣言した 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

こちらも参照ください