VB.Net编程中Module有什么用?

What is the use of Module in VB.Net programming?

我正在为我使用的 CAD 工具创建一个 .dll。

创建新项目(class 库)后,我得到了一个“public class-end class”块。 我在那个块中写了我的主要方法。当我 运行 我的 CAD 工具中的 dll 时,它给我主入口点丢失错误。

所以我回来改“public class-end class” ---> “Public Module-end Module”.

现在可以找到main方法了

为什么会这样?我在这些论坛上读到,我们不应该过多地使用模块。 如果我不经常使用模块,我应该如何在没有模块块的情况下使其工作?

模块来自旧版本的 Visual Basic,有点像 Visual Basic 代码文件的“OG”。当 Visual Basic 6 及更早版本出现时,Visual Basic 有点类似于面向对象,虽然存在 classes,但使用模块代替静态 classes 更有意义。然后,当引入 Visual Basic .NET 时,Microsoft 付出了真正的努力,使该编程语言成为真正的面向对象的编程语言。

人们可能会告诉您使用 classes 而不是模块,因为模块是 Visual Basic 成为纯面向对象语言之前的遗留物。从 2005 年开始,您可以在模块中做的任何事情基本上都只能作为静态(又名共享)完成 class,扩展方法除外。因此,通过在模块上使用 classes,您将采用更面向 .NET 的方法,而不是 Visual Basic 优先方法。

关于你的具体问题,问题是你的CAD工具正在寻找一种入口方法,但找不到。简单的解决方法是添加共享方法:

Public Class MyClass

    Public Shared Sub Main()
        ' ...
    End Sub

End Class

VB.Net 没有像 C# 那样的静态 classes。静态 classes 允许您创建静态方法

class foo
{
    void bar() {}
}

像这样在 VB.Net 中访问

foo.bar()

如果您想使用 VB.Net 创建相同的功能,您有两个选择,要么使用模块

Module foo1
    Sub bar()

    End Sub
End Module
Class foo2
    Shared Sub bar()

    End Sub
End Class

然而不同之处在于 Module 和 Class 的范围。模块是全局作用域的,因此您可以在原始命名空间之外调用模块方法,而无需使用模块名称对其进行限定,但要调用静态方法,您需要使用 class 名称对其进行限定,甚至在中导入命名空间class 与静态方法

的情况
bar()
foo2.bar()

但是模块肯定有利于扩展方法,如果您想在整个项目中扩展 class,那么全局范围实际上会有所帮助

Module Extensions
    <Extension>
    Sub bar(value As String)

    End Sub
End Module
Dim s = "my string"
s.bar()

在你的例子中,它需要一个 C# 风格的静态 class 方法,因为 VB.Net 没有静态 classes,一个模块或 class用静态方法都满足。