Есть ли способ настроить модуль так, чтобы он вел себя как статический класс? - PullRequest
1 голос
/ 09 февраля 2010

Этот вопрос для VBers, он не имеет отношения к C #.

В VB, когда вы создаете модуль, все его функции и члены доступны в области действия без необходимости вводить имя модуля, как и всефункции VB (Rnd, Mid, IIf и т. д.).

Я хочу создать модуль, но мне нужно явно написать его имя для доступа к его членам, то есть его не следует загружать в область видимостипространство имен.

Обновление

Например, у меня есть модуль методов расширения, я не хочу, чтобы все его члены отображались в области действия и в областиintellisense.

Я хочу, чтобы он был доступен только instance.ExtensionMethod().

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2010

Если вы создаете класс вместо модуля, то 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
0 голосов
/ 09 февраля 2010

Просто добавьте пространство имен вокруг модуля:

Namespace MyModule

  Module MyModule

    Sub MyMethod()
    End Sub

  End Module

End Namespace

(О, и я не VB: э ...;))

0 голосов
/ 09 февраля 2010

Вы можете просто добавить его в другое пространство имен. То есть если вы хотите вызвать Foo.Bar и у вас есть модуль с именем FooModule, поместите его в пространство имен с именем Foo.

Или ... просто иметь обычный класс с кучей общих методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...