4

次のコードがあります。

Public Class Form1
Private Function Step1_Execute() As Boolean
    Return Step1_Verify()
End Function

Private Function Step1_Verify() As Boolean
    Return True
End Function

Private Function Step2_Execute() As Boolean
    Return Step2_Verify()
End Function

Private Function Step2_Verify() As Boolean
    Return True
End Function
End Class

私がやりたいことは、次のようなコードを分離できることです (これは明らかに機能しません)。

Public Class Form1

Namespace Step1
    Private Function Step1_Execute() As Boolean
        Return Step1_Verify()
    End Function

    Private Function Step1_Verify() As Boolean
        Return True
    End Function
End Namespace

Namespace Step2
    Private Function Step2_Execute() As Boolean
        Return Step2_Verify()
    End Function

    Private Function Step2_Verify() As Boolean
        Return True
    End Function
End Namespace

End Class

Step2_ を一連の関数の前に配置する代わりに、Step2.Execute() を呼び出すことができるような、クラス内の名前空間の機能が必要です。step1、step2などに個別のクラス/モジュールを作成する必要はありません。

クラス内から名前空間機能を実現する方法はありますか?

4

3 に答える 3

2

モジュール(ほとんどの場合、C# の静的クラスと同等) を使用するのはどうですか? それはうまく機能し、必要な参照スタイルを提供するように思われます。

Module Step1
    Private Function Execute() As Boolean
        Return Verify()
    End Function

    Private Function Verify() As Boolean
        Return True
    End Function
End Module

Module Step2
    Private Function Execute() As Boolean
        Return Step2_Verify()
    End Function

    Private Function Verify() As Boolean
        Return True
    End Function
End Module

Module必要に応じて、VB.NETを他のクラス内にネストすることもできると思います。

編集:

すべてのモジュールが同じコントラクト (メソッド シグネチャのセット) を持っていることに気付いたので、ここでインターフェイスを実装し、クラスのインスタンスを作成することは実際には理にかなっています。もう少しコードが増えるかもしれませんが、物事を抽象化したい場合は、努力する価値があるかもしれません。

于 2010-05-01T18:05:30.133 に答える
1

いいえ。

名前空間は実在するものではありません。名前空間は、クラスの名前の一部にすぎません。したがって、クラス System.Text.StringBuilder がある場合、「System.Text を使用する」部分は、「型が見つからない場合は、'System.不明な部分の前に.Text'。

于 2010-05-01T17:51:06.073 に答える
1

明らかに、これを 3 つのクラスに分割する必要があります。コードを実行するもの。そして、execute メソッドと verify メソッドを含む同じインターフェイスを継承する 2 つよりも。

実行中のクラスには、このインターフェイスのコレクションが含まれており、実行したい順序で追加するだけです。

于 2010-05-02T08:58:37.977 に答える