这个问题适用于VBers,它与C#无关。
在VB中,当你创建一个模块时,它的所有函数和成员都可以在作用域中使用,而不需要输入模块名称,就像所有VB函数(Rnd,Mid,IIf等)一样。
我想创建一个模块,但是我必须明确地写它的名字来访问它的成员,即它不应该像命名空间一样加载到范围内。
更新
例如,我有一个扩展方法模块,我不希望它的所有成员都出现在范围和智能感知中。
我希望它仅由instance.ExtensionMethod()
提供。
有什么想法吗?
答案 0 :(得分:2)
如果您创建的是Class而不是Module,那么VB.NET将坚持使用类名。例如:
Public MustInherit Class Utils
Public Shared Function Sqr(ByVal arg As Double) As Double
Return arg * arg
End Function
End Class
...
Dim result As Double = Utils.Sqr(42) 'Utils required
几乎没有必要,但您可以通过添加私有构造函数来阻止任何人继承此类。
更新
避免扩展方法在IntelliSense中污染全局命名空间。我发现了一个相当意外的解决方法:
Imports System.Runtime.CompilerServices
Imports System.ComponentModel
<EditorBrowsable(EditorBrowsableState.Never)> _
Module Extensions
<Extension()> _
Public Sub Method(ByVal obj As ExampleClass)
End Sub
End Module
答案 1 :(得分:0)
您可以将其添加到另一个名称空间。即如果你想调用Foo.Bar并且你有一个名为FooModule的模块,请将它放在一个名为Foo的命名空间中。
或者......只需要一个包含大量共享方法的常规类。
答案 2 :(得分:0)
只需在模块周围添加命名空间:
Namespace MyModule
Module MyModule
Sub MyMethod()
End Sub
End Module
End Namespace
(哦,我不是VB:呃......;))