2009-08-06 39 views
4

所以我在过去的6年中一直在C#编程,现在我用VB.net弄湿了我的脚。Visual Basic模块v Singleton

我正在使用的代码库使用了一些模块。对我来说模块看起来很像一个单身人士。只有一个存在;它可以在命名空间内的任何地方调用。

有什么我在这里失踪? VB不支持单例构造的正常方式(私有构造函数/公共实例字段)吗?

回答

6

模块不是单身人士。它更类似于C#中的静态类。如果你反编译代码,你会看到他们有一个非常相似的结构(模块有一个额外的属性)。

一个C#静态类和VB.Net模块之间的主要区别...

  • 不必静态/共享预选赛添加到模块的方法。它们在默认情况下是共享的,并且您不能更改此模块如果某个模块位于导入的名称空间中,则其所有方法都可以不受限制地使用。
  • 静态类在C#中可以通用,模块不能(尽管它们可能具有通用名成员​​)
+0

因此,基本上与模块一样,它就像通过并声明静态内部(这将在C#中需要)。 然后,它和单例之间的区别在于,单例支持继承(作为派生类,或来自接口)和多态,其中模块就是它的原型。我只是想把它全部整理出来。 – 2009-08-06 22:44:17

+0

@Joel,那种。要记住关于模块的重要事情是有史以来没有实例。底下它编译到一组静态方法(就像C#静态类)。最大的区别是,如果包含模块可用,它们将被添加到全局名称范围中。 – JaredPar 2009-08-06 22:45:30

3

如果我没有记错,一个VB模块是同样的事情作为一个静态类。

+1

2之间有微妙的差异,但在高水平他们是相同的。 – JaredPar 2009-08-06 21:44:21