有没有办法将Module设置为静态类?

时间:2010-02-09 18:48:51

标签: vb.net module

这个问题适用于VBers,它与C#无关。

在VB中,当你创建一个模块时,它的所有函数和成员都可以在作用域中使用,而不需要输入模块名称,就像所有VB函数(Rnd,Mid,IIf等)一样。

我想创建一个模块,但是我必须明确地写它的名字来访问它的成员,即它不应该像命名空间一样加载到范围内。

更新

例如,我有一个扩展方法模块,我不希望它的所有成员都出现在范围和智能感知中。

我希望它仅由instance.ExtensionMethod()提供。

有什么想法吗?

3 个答案:

答案 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:呃......;))