2009-02-04 56 views
6

這可能是個愚蠢的問題 - 但爲什麼共享方法可用於VB.net中的類型和實例 - 我錯誤地認爲它們等價於C#靜態方法嗎?VB.net共享vs C#靜態可訪問性差異,爲什麼?

MyClass.MySharedMethod() 

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

我爲什麼允許這樣做嗎?這有什麼可能的優勢 - 我所看到的這一切使人們在使用智能感知時感到困惑。我敢肯定,這與VB6中的一些約定有關,爲什麼麻煩把它帶到.NET中 - 它似乎對我來說很糟糕。

回答

17

是的,它基本上是來自VB6的宿醉。 Java也允許你這樣做,但是現在大多數IDE都會警告你,我相信。

是的,這是一個非常糟糕的主意。 Thread.Sleep最明顯的例子是:Thread.Sleep:

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

哪個線程在睡覺?目前的一個。衛生署!

2

這可能是一個愚蠢的問題 - 但爲什麼共享方法可用於VB.net中的類型和實例 - 我錯了假設它們等同於C#靜態方法嗎?

它們是相同的。 VB 警告如果您嘗試在實例上使用它們,但它不被禁止。這可能與動態打字和後期綁定有關。假設你有一個遲到的對象(Object)而不知道它的確切類型。你將如何去調用它的類的靜態方法?

據我所知,這在C#中是不可能的(沒有訴諸反思)。在VB與Option Strict Off,你可以簡單地稱它爲對象的實例方法。

+1

好吧,那爲什麼不禁止呢 - 他們知道這是一個壞主意,如果他們警告你 - 那麼爲什麼要麻煩? – dfasdljkhfaskldjhfasklhf 2009-02-04 14:07:13

+0

+1 [已確認](http://ideone.com/Nuag3y) – 2013-09-25 15:49:32

相關問題