在C#中,什么被认为是VB.NET模块?

18

VB.NET有类和模块,因此我的第一个问题是它们之间的区别是什么?另外,我注意到C#没有模块,只有类,有没有替代模块或是它们被移除了?


请参见https://dev59.com/G3NA5IYBdhLWcg3wpfmu。 - AakashM
1个回答

33

关于最接近VB模块的东西,在C#中就是静态类。

例如:

在VB.NET中

Module SomeModule
    Public Sub DoSomething
        MsgBox("Doing something!")
    End Sub
End Module

同样的内容,使用C#语言实现:

public static class DoSomethingFuncs
{
    public static void DoSomething() {
        MessageBox.Show("Doing something!");
    }
}

1
(对于我们这些不太了解的人来说,比较VB模块和C#静态类会很有趣。) - user166390
5
是的,VB.Net中的模块等同于C#中的静态类,它们也具有相同的限制(例如不能继承,始终只有一个实例,所有成员都是共享的)。 - Aidiakapi
6
@Aidiakapi 在此回答的评论中表示:“模块并不完全等同于 C# 中的静态类。如果导入了命名空间,模块中的方法实际上是全局的。”例如,在上面的 VB 代码中,您可以在任何类中编写 DoSomething,但在 C# 中必须使用类名限定符 DoSomethingFuncs.DoSomething - MarkJ
@MarkJ,那是它们被称为的方式,并不是它们工作的方式。它们的范围确实比静态类更广。一个显著的事情是,将VB.Net模块反编译为C#的结果是:[StandardModule] internal sealed class Module1,而将C#中的静态类(名为Module1)反编译的结果是:internal abstract sealed class Module1。因此,区别在于类参数(可能用于反射),并且C#中的静态类也被标记为抽象的。 - Aidiakapi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接