VB.net共享vs C#静态可访问性差异,为什么?

时间:2009-02-04 14:02:19

标签: c# vb.net

这可能是一个愚蠢的问题 - 但为什么共享方法可用于VB.net中的类型和实例 - 我认为它们等同于C#静态方法我错了吗?

MyClass.MySharedMethod()

dim mc as new MyClass()
mc.MySharedMethod()

为什么我被允许这样做?这有什么可能的优势 - 我所能看到的就是在使用intellisense时让人困惑。我敢肯定这与经典VB6中的一些惯例有关,为什么还要把它带到.NET上 - 它对我来说似乎很难受。

2 个答案:

答案 0 :(得分:17)

是的,它基本上是VB6的宿醉。 Java也允许你这样做,但是现在大多数IDE都会警告你。

是的,这是一个非常糟糕的主意。最糟糕的例子是Thread.Sleep:

Dim t as new Thread(...)
t.Sleep(1000)

哪个线程正在睡觉?目前的一个。卫生署!

答案 1 :(得分:2)

  

这可能是一个愚蠢的问题 - 但为什么共享方法可用于VB.net中的类型和实例 - 我认为它们等同于C#静态方法我错了吗?

他们是一样的。如果您尝试在实例上使用它们,VB 警告但不禁止它。这可能与动态类型和后期绑定有关。想象一下,你有一个后期绑定的对象(Object)而不知道它的确切类型。你会如何调用它的类的静态方法?

据我所知,这在C#中是不可能的(不使用反射)。在带有Option Strict Off的VB中,您可以简单地将其称为对象的实例方法。