Vb.net 强制模块命名空间限定

Vb.net 强制模块命名空间限定,vb.net,module,namespaces,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

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)

如果有办法强迫您指定模块名,我不确定它是什么。但是,您可以这样做,即使其成为具有共享成员的类,而不是模块。例如:

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

此行为可以通过使用
HideModuleName
属性作为解决方法来实现-
使用名称空间包装模块,并向模块添加
HideModuleName
属性

命名空间Utils
友元模块UtilsModule
公共子方法(参数作为对象)
'方法代码
端接头
端模块
结束命名空间
如果名称空间不会与文件中的
Imports
一起添加,则 您需要使用名称空间名称,并且
HideModuleName
属性将对intellisense隐藏模块名称

Utils.YourMethod(param)

谢谢你的回答。我想我将只移动名称空间中的所有模块。