C# 静态类和 VB.NET 模块之间有什么区别如果有的话

问题描述

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 开发人员会选择前者。