Маркировка статического класса в VB.NET - PullRequest
79 голосов
/ 26 сентября 2008

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

Ответы [ 5 ]

114 голосов
/ 26 сентября 2008

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

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

Если вы действительно хотите, чтобы vb.net соответствовал статическому классу C #, используйте Module. Он не может быть унаследован, и все члены, свойства и методы являются статическими / общими.

43 голосов
/ 20 сентября 2013

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

NotInheritable Class MyStaticClass

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

    End Sub

    Public Shared Function MyMethod() As String

    End Sub

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

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

6 голосов
/ 26 сентября 2008

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

Общий статический эквивалент VB.Net является общим.

3 голосов
/ 11 мая 2013

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

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

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

 Dim myage As Integer = DB.AGE

Friend = public, NotInheritable = static

2 голосов
/ 26 сентября 2008

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

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