C#的静态与VB.NET中的NotInheritable相同吗?

Ric*_*d77 3 c# vb.net

遍布整个地方需要包含实用程序方法的类.所以,我想把它变成一个静态类.

为什么静态转换为NotInheritable

public static class MyClass 
{
    public static string MyProperty { get; set; } 

    public static void MyMethod()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

Public NotInheritable Class Employee
   Private Sub New()
   End Sub
   Public Shared Property MyProperty() As String
      Get
          Return m_MyProperty
      End Get
      Set
          m_MyProperty = Value
      End Set
  End Property
  Private Shared m_MyProperty As String

  Public Shared Sub MyMethod()
  End Sub
 End Class
Run Code Online (Sandbox Code Playgroud)

在我看来,这看起来更像是一个密封的类,不是吗?

D S*_*ley 10

为什么静态转换为NotInheritable?

它没有直接转换.这一事实staticsealed是什么使等价类在VB.NETNonInheritable

在我看来,这看起来更像是一个密封的类,不是吗?

是的,但它并非"错误",因为静态类也是密封的.

VB.NET没有"静态类"的概念.它最接近的是模块,它不是完全等价的,static因为它不能,例如,在其中嵌套另一个模块,而你可以在C#中的另一个静态类中定义一个静态类.因此转换器可能只是因为没有将static类转换为a而犯错误Module.

由于C#中的静态类是无法实例化的密封类,因此NotInheritable与VB.NET中的等效类最接近的是具有所有Shared方法和属性的类,具有私有默认实例构造函数,因此无法实例化类.

因此,生成的VB类具有源类的所有特性,但提供这些特性的机制有些不同.


Squ*_*mmy 6

我不知道你用来转换什么staticNotInheritable,但它们是不等价的.

NotInheritable在VB.NET中相当于sealed在C#中.在VB.NET中调用
C#.staticShared

值得注意的是,是Shared不能应用于类,只能应用于类的成员.这在VB.NET规范中有概述

类声明:

ClassDeclaration ::=
   [ Attributes ] [ ClassModifier+ ] Class Identifier LineTerminator
   [ ClassBase ]
   [ TypeImplementsClause+ ]
   [ ClassMemberDeclaration+ ]
   End Class LineTerminator
ClassModifier ::= AccessModifier | Shadows | MustInherit | NotInheritable
Run Code Online (Sandbox Code Playgroud)

(注意明显缺乏SharedClassModifier ::=)

正如其他用户所提到的,a Module更好地等同于C#static类.