web-dev-qa-db-ja.com

VB.NETでクラスを静的としてマークする

最近の question および answer で述べたように、静的クラスから継承することはできません。 VB.NET内の静的クラスに付随するルールをどのように実施しますか?フレームワークはC#とVBの間で互換性があるため、クラスを静的にマークする方法があることは理にかなっていますが、方法はないようです。

80
MagicKat

モジュール==静的クラス

継承できないクラスが必要な場合は、NotInheritableクラスを使用します。ただし、静的/共有ではありません。すべてのメソッド、プロパティ、およびメンバーをSharedとしてマークできますが、C#の静的クラスと厳密には同じではありません。コンパイラによって強制されないためです。

C#静的クラスに相当するvb.netが本当に必要な場合は、モジュールを使用します。継承することはできず、すべてのメンバー、プロパティ、およびメソッドは静的/共有です。

114
Joel Coehoorn

ほぼそこに。インスタンス化も防ぐ必要があります。

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-静的クラスと静的クラスメンバー

45
Gary Newsom

継承できないクラスを作成する場合は、C#ではSealedを使用でき、VB.NetではNotInheritableを使用できます。

静的に相当するVB.Netは共有されます。

6
Charles Graham

Vb.netで静的クラスを作成できます。解決策は

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

AGE変数はpublic staticです。このように他のコードで使用できます

 Dim myage As Integer = DB.AGE

Friend = public、NotInheritable = static

3
Tori

CLRの観点から見ると、C#静的クラスは単に「封印された」「抽象」クラスです。インスタンスは抽象的であるため作成できません。また、インスタンスは封印されているため継承できません。残りは単なるコンパイラの魔法です。

2
Ilya Ryzhenkov