Маркировка статического класса в VB.NET

72

Как указано в недавнем question и , вы не можете наследовать от статический класс. Как применять правила, которые соответствуют статическим классам внутри VB.NET? Поскольку структура совместима между С# и VB, было бы разумно, что существует способ отметить статический класс, но, похоже, не существует способа.

Теги:

6 ответов

105
Лучший ответ

Модуль == статический класс

Если вам нужен только класс, который вы не можете наследовать, используйте класс NotInheritable. Но это не будет static/Shared. Вы можете отметить все методы, свойства и члены как разделенные, но это не строго то же самое, что и статический класс в С#, поскольку он не применяется компилятором.

Если вам действительно нужен эквивалент vb.net для статического класса С#, используйте модуль. Он не может быть унаследован, и все члены, свойства и методы статичны/разделены.

  • 1
    да, модуль является статическим классом. Просто прочитайте о методах расширения, и MS скажет вам то же самое.
  • 0
    Интересно. Я не играл с расширениями в VB.
Показать ещё 8 комментариев
39

Почти готово. Вы также должны предотвратить создание экземпляров.

NotInheritable Class MyStaticClass

    ''' <summary>
    ''' Prevent instantiation.
    ''' </summary>
    Private Sub New()

    End Sub

    Public Shared Function MyMethod() As String

    End Sub

End Class
  • Shared - это метод статического класса.
  • Не наследуемо, как запечатано.
  • Private New как статический класс не может быть создан.

Увидеть:
MSDN - Статические классы и члены статических классов

  • 1
    +1 за пример кода
  • 0
    почему это не принятый ответ? Спасибо за фрагмент кода
5

Если вы просто хотите создать класс, который вы не можете наследовать, в С# вы можете использовать Sealed, а в VB.Net используйте NotInheritable.

Эквивалент VB.Net статики является общим.

  • 8
    Вы не можете пометить класс как общий.
  • 0
    вы помечаете его переменные и функции как общие, так же, как вы должны делать в статическом классе C #. Маркировка как NotInheritable делает его запечатанным.
2

Вы можете создать статический класс в vb.net. Решение

Friend NotInheritable Class DB
    Public Shared AGE As Integer = 20
End Class

AGE variable является общедоступной, вы можете использовать ее в другом коде, как это показано

 Dim myage As Integer = DB.AGE

Друг = общедоступный, NotInheritable = статический

  • 3
    Друг! = Общедоступный, друг = внутренний
  • 1
    NotInheritable! = Статический, NotInheritable == запечатанный
2

С точки зрения CLR, статический класс С# является просто "запечатанным" и "абстрактным" классом. Вы не можете создать экземпляр, потому что он абстрактный, и вы не можете наследовать его, поскольку он запечатан. Остальное - это просто магия компилятора.

0

Я думаю, что эквивалент VB.NET static равен Shared.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню