遍布整个地方需要包含实用程序方法的类.所以,我想把它变成一个静态类.
为什么静态转换为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?
它没有直接转换.这一事实static类sealed是什么使等价类在VB.NETNonInheritable
在我看来,这看起来更像是一个密封的类,不是吗?
是的,但它并非"错误",因为静态类也是密封的.
VB.NET没有"静态类"的概念.它最接近的是模块,它不是完全等价的,static因为它不能,例如,在其中嵌套另一个模块,而你可以在C#中的另一个静态类中定义一个静态类.因此转换器可能只是因为没有将static类转换为a而犯错误Module.
由于C#中的静态类是无法实例化的密封类,因此NotInheritable与VB.NET中的等效类最接近的是具有所有Shared方法和属性的类,具有私有默认实例构造函数,因此无法实例化类.
因此,生成的VB类具有源类的所有特性,但提供这些特性的机制有些不同.
我不知道你用来转换什么static来NotInheritable,但它们是不等价的.
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)
(注意明显缺乏Shared下ClassModifier ::=)
正如其他用户所提到的,a Module更好地等同于C#static类.
| 归档时间: |
|
| 查看次数: |
2705 次 |
| 最近记录: |