问题描述
C# 支持在类定义上使用 static
修饰符来定义一个不能被继承、被密封并且只有静态成员的类。 VB.NET 支持 Module
语句来定义通过其命名空间可用的引用类型,以达到类似的效果。
我知道 C# 和 VB.NET 共享一个共同的 CodeDOM、Roslyn 编译器和目标 IL。我的问题是静态类与模块之间有什么区别(如果有的话)。
解决方法
就我而言,只有两个真正的区别在于模块不能被继承,也没有构造函数。
除此之外,模块非常类似于不可继承的类,其中该类只包含共享(vb.net 相当于静态)成员。
例如以下模块:
Public Module Test
Public Function Foo() As String
Return "Foo"
End Function
End Module
可以类似地表示为:
Public NotInheritable Class Test
Public Shared Function Foo() As String
Return "Foo"
End Function
End Class
C# 开发人员可能更喜欢后者,而传统的 Visual Basic 开发人员会选择前者。