强制模块名称空间限定

时间:2013-02-12 18:39:50

标签: vb.net module namespaces

VB.net允许您使用模块名称跳过函数调用的限定:

Public Module EvalDataFetcher

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

End Module

然后做:

Dim foo As String = JoinStr(myBars)

如何强制用户使用完全限定的表单?即力:

Dim foo As String = EvalDataFetcher.JoinStr(myBars)

2 个答案:

答案 0 :(得分:1)

如果有办法强制你指定模块名称,我不确定它会是什么。但是,你这样做的方法是使它成为一个具有共享成员而不是模块的类。例如:

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

现在,当您调用JoinStr方法时,您将被迫指定类名:

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

答案 1 :(得分:1)

使用HideModuleName属性作为解决方法 - HideModuleNameAttribute,可以实现此行为 使用命名空间包装模块并将HideModuleName属性添加到模块

Namespace Utils

    <HideModuleName()>
    Friend Module UtilsModule

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

    End Module

End Namespace

如果名称空间不会与文件中的Imports一起添加,那么 您需要使用命名空间名称,HideModuleName属性将隐藏intellisense中的模块名称

Utils.YourMethod(param)