在VB.NET中标记类静态

时间:2008-09-25 20:30:32

标签: c# vb.net

正如最近在questionanswer中所述,您无法从静态类继承。如何在VB.NET中强制执行与静态类一起使用的规则?由于框架在C#和VB之间是兼容的,因此有一种方法可以将类标记为静态,但似乎没有办法。

5 个答案:

答案 0 :(得分:114)

模块==静态类

如果您只想要一个无法继承的类,请使用NotInheritable类。但它不会是静态的/共享的。您可以将所有方法,属性和成员标记为Shared,但这与C#中的静态类并不完全相同,因为它不是由编译器强制执行的。

如果您确实希望vb.net等效于C#静态类,请使用模块。它不能被继承,所有成员,属性和方法都是静态/共享的。

答案 1 :(得分:42)

几乎就在那里。你也必须防止实例化。

NotInheritable Class MyStaticClass

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

    End Sub

    Public Shared Function MyMethod() As String

    End Sub

End Class
  • 共享就像静态类的方法。
  • NotInheritable就像密封一样。
  • Private New就像静态类无法实例化。

请参阅:
MSDN - Static Classes and Static Class Members

答案 2 :(得分:6)

如果您只想创建一个无法继承的类,可以在C#中使用Sealed,在VB.Net中使用NotInheritable。

静态的VB.Net等价物。

答案 3 :(得分:3)

您可以在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

答案 4 :(得分:2)

从CLR的角度来看,C#静态类只是“密封”和“抽象”类。你不能创建一个实例,因为它是抽象的,你不能从它继承,因为它是密封的。其余的只是一些编译魔术。