2008-09-25 25 views
63

正如剛纔在questionanswer中所述,您不能從靜態類繼承。如何執行與VB.NET中的靜態類一起使用的規則?由於框架在C#和VB之間是兼容的,因此可以有一種方法來標記靜態類,但似乎沒有辦法。在VB.NET中標記靜態類

回答

93

模塊==靜態類

如果你只是想,你不能繼承一個類,使用NotInheritable類。但它不會是靜態的/共享的。您可以將所有方法,屬性和成員標記爲Shared,但這與C#中的靜態類並不完全相同,因爲它不是由編譯器強制執行的。

如果你真的想要vb.net相當於一個C#靜態類,使用一個模塊。它不能被繼承,並且所有成員,屬性和方法都是靜態/共享的。

+1

是一個模塊是一個靜態類。只要閱讀擴展方法,MS會告訴你同樣的事情。 – chrissie1 2008-09-25 21:19:13

+0

有趣。我沒有在VB中使用擴展。 – MagicKat 2008-09-25 22:21:22

+2

我收回了我以前的評論。我正在看一個反射器模塊,IL顯示它是密封的。 – MagicKat 2008-09-25 22:30:07

-1

我覺得VB.NET相當於staticShared

5

如果您只是想創建一個無法繼承的類,請在C#中使用Sealed,並在VB.Net中使用NotInheritable。

靜態的VB.Net等價物是共享的。

1

從CLR的角度來看,C#靜態類只是「密封」和「抽象」類。你不能創建一個實例,因爲它是抽象的,你不能從它繼承,因爲它是封閉的。剩下的只是一些編譯器魔術。

2

您可以在vb.net中創建靜態類。解決的辦法是

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

AGE變量是公共靜態,你可以用它在其他代碼就這樣

Dim myage As Integer = DB.AGE 

朋友=公共,NotInheritable =靜態

30

幾乎沒有。你也必須防止實例化。

NotInheritable Class MyStaticClass 

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

    End Sub 

    Public Shared Function MyMethod() As String 

    End Sub 

End Class 
  • 共享像靜態類的方法。
  • 不可深入就像密封。
  • 私有新建就像靜態類不能被實例化。

看看... MSDN - Static Classes and Static Class Members