[c#] VB.NET에서 클래스 정적 표시

최근 질문답변 에서 언급했듯이 정적 클래스에서 상속 할 수 없습니다. VB.NET 내부의 정적 클래스와 함께 사용되는 규칙을 어떻게 적용합니까? 프레임 워크는 C #과 VB간에 호환되므로 클래스를 정적으로 표시하는 방법이있을 수 있지만 방법이없는 것 같습니다.



답변

모듈 == 정적 클래스

상속 할 수없는 클래스를 원하면 클래스를 사용하십시오 NotInheritable. 하지만 정적 / 공유되지 않습니다. 모든 메서드, 속성 및 멤버를으로 표시 할 수 Shared있지만 컴파일러에 의해 적용되지 않기 때문에 C #의 정적 클래스와 완전히 동일하지는 않습니다.

C # 정적 클래스에 해당하는 VB.Net을 실제로 원하는 경우 Module. 상속 될 수 없으며 모든 멤버, 속성 및 메서드는 정적 / 공유입니다.


답변

거의 다 왔어. 인스턴스화도 방지해야합니다.

NotInheritable Class MyStaticClass

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

    End Sub

    Public Shared Function MyMethod() As String

    End Function

End Class
  • Shared는 정적 클래스의 메서드와 같습니다.
  • NotInheritable은 봉인 된 것과 같습니다.
  • Private New는 정적 클래스를 인스턴스화 할 수없는 것과 같습니다.

참조 :
MSDN-정적 클래스 및 정적 클래스 멤버


답변

상속 할 수없는 클래스를 만들려는 경우 C #에서는 Sealed를 사용하고 VB.Net에서는 NotInheritable을 사용할 수 있습니다.

정적에 해당하는 VB.Net은 공유됩니다.


답변

vb.net에서 정적 클래스를 만들 수 있습니다. 해결책은

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

AGE 변수는 공개 정적이므로 다음과 같이 다른 코드에서 사용할 수 있습니다.

 Dim myage As Integer = DB.AGE

친구 = 공개, NotInheritable = 정적


답변

CLR 관점에서 C # 정적 클래스는 “봉인 된”클래스와 “추상적 인”클래스입니다. 추상이기 때문에 인스턴스를 만들 수 없으며 봉인되어 있기 때문에 상속 할 수 없습니다. 나머지는 컴파일러 마법입니다.


답변