Top / .NET備忘録 / 99.小ネタ / 16.GoSub の書き換え

GoSub ステートメントの書き換え

VB.NET で GoSub ステートメントは使えなくなりました。

本来なら処理を見直して .NET の流儀で書き直すのが良いのですが、できるだけ間違わず書き換えるには次のような方法が考えられます。

サブルーチンの中で Exit Sub や Exit Function していた場合はそれなりに工夫する必要がありますが、おおまかには

・Sub や Function をクラスにする

・ローカル変数をクラス変数にする(インスタンス化すると初期化されます。)

・サブルーチンは Sub に置き換え、Call で呼び出す。

という方法で書き換えられるかと思います。

例)
【VB6.0】

Private Sub Hoge()
    Dim A As Integer
    Dim B As Integer
    On Error GoTo Err_Handler:
    GoSub S1
    GoSub S2
    Exit Sub
S1:
    A = 1
    Return
S2:
    B = A + 1
    Return
Err_Handler:
    MsgBox Err.Description, vbExclamation, Err.Source
End Sub

【VB.NET】

Private Sub Hoge()
    Dim tmp As New CHoge()
    tmp.Execute()
End Sub

Private Class CHoge
    Dim A As Integer
    Dim B As Integer

    Public Sub Execute()
        On Error GoTo Err_Handler
        Call S1()
        Call S2()
        Exit Sub
Err_Handler:
        MsgBox(Err.Description, vbExclamation, Err.Source)
    End Sub

    Sub S1()
        A = 1
    End Sub

    Sub S2()
        B = A + 1
    End Sub

End Class

ここでひとつ問題。モジュールならモジュール変数にアクセスできますがクラスの場合はインスタンスを渡して保持する必要があります。

Class Foo

    Private localString As String '←これ

    Private Sub Hoge()
        Dim tmp As New CHoge(Me)
        tmp.Execute()
    End Sub

    Private Class CHoge
        Dim A As Integer
        Dim B As Integer
        Dim Owner As Foo

        Public Sub New(owner As Foo)
            Me.Owner = owner
        End Sub

        Public Sub Execute()
            On Error GoTo Err_Handler
            Dim c As String
            c = Owner.localString
            Call S1()
            Call S2()
            Exit Sub
Err_Handler:
            MsgBox(Err.Description, vbExclamation, Err.Source)
        End Sub

        Sub S1()
            A = 1
        End Sub

        Sub S2()
            B = A + 1
        End Sub

    End Class



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2017-08-28 (月) 09:38:04 (83d)