簡體   English   中英

VB.net共享vs C#靜態可訪問性差異,為什么?

[英]VB.net Shared vs C# Static accessibility differences, why?

這可能是一個愚蠢的問題 - 但為什么共享方法可用於VB.net中的類型和實例 - 我錯誤地認為它們等同於C#靜態方法?

MyClass.MySharedMethod()

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

為什么我被允許這樣做? 這有什么可能的優勢 - 我所能看到的就是在使用intellisense時讓人困惑。 我確信這與經典VB6中的一些約定有關,為什么還要把它帶到.NET上 - 它對我來說似乎太過分了。

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

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

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

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

這可能是一個愚蠢的問題 - 但為什么共享方法可用於VB.net中的類型和實例 - 我錯誤地認為它們等同於C#靜態方法?

他們是一樣的。 如果您嘗試在實例上使用它們,VB 發出警告但不禁止它。 這可能與動態類型和后期綁定有關。 想象一下,你有一個后期綁定的對象( Object )而不知道它的確切類型。 你會如何調用它的類的靜態方法?

據我所知,這在C#中是不可能的(不使用反射)。 在帶有Option Strict Off VB中,您可以簡單地將其稱為對象的實例方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM