Search code examples
asp.netvb.netvisual-studionamespacesregions

Is it possible get the functionality of namespaces inside a class?


I have the following code:

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

What I would like to do is be able to separate the code, similar to the following (which obviously doesn't work):

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

I would like the functionality of namespaces inside of a class, as in something that would let me call Step2.Execute() instead of having to put Step2_ in front of a whole bunch of functions. I don't want to have to create separate classes / modules for step1, step2, etc.

Is there a way that I can accomplish namespace functionality from inside a class?


Solution

  • How about just using a module (equivalent for the most part to a static class in C#)? That would seem to do the job well and give you the reference style you want.

    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
    

    I believe you can even nest VB.NET Modules within other classes, if you wish.

    Edit:

    Just realised that all of the modules have the same contract (set of method signatures), so it would actually make sense to implement an interface here, and create instances of the class. A tad more code perhaps, but if you want to abstractify things, it may be worth the effort.