Simon Bergot
Simon Bergot

Reputation: 10582

force module namespace qualification

VB.net allows you to skip the qualification of a function call with the module name:

Public Module EvalDataFetcher

    Public Function JoinStr(ByVal values As IEnumerable(Of String)) As String
        ' body
    End Function

End Module

And then do:

Dim foo As String = JoinStr(myBars)

How to force the users to use the fully qualified form? ie force:

Dim foo As String = EvalDataFetcher.JoinStr(myBars)

Upvotes: 2

Views: 590

Answers (2)

Fabio
Fabio

Reputation: 32445

This behavior can be achieved with HideModuleName attribute as workaround - HideModuleNameAttribute
Wrap your module with namespace and add HideModuleName attribute to the module

Namespace Utils

    <HideModuleName()>
    Friend Module UtilsModule

        Public Sub YourMethod(parameter As Object)
            'Method code
        End Sub

    End Module

End Namespace

If namespace will not be added with the Imports in the file, then you will need to use namespace name and HideModuleName attribute will hide module name from the intellisense

Utils.YourMethod(param)

Upvotes: 2

Steven Doggart
Steven Doggart

Reputation: 43743

If there is a way to force you to specify the module name, I'm not sure what it would be. However, the way you ca do it is to make it a class with shared members rather than a module. For instance:

Public Class EvalDataFetcher
    Public Shared Function JoinStr(ByVal values As IEnumerable(Of String)) As String
        ' body
    End Function
End Module

Now, when you call the JoinStr method, you will be forced to specify the class name:

Dim foo1 As String = JoinStr(myBars)  ' Won't compile
Dim foo2 As String = EvalDataFetcher.JoinStr(myBars)  ' Works

Upvotes: 2

Related Questions