It's not an oversight but your VB code will trigger a warning, which plainly means: do not use this notation.
In VB, static members can be accessed via an instance, since strictly speaking, VB doesn’t have static
: VB has the keyword Shared
, meaning that the member is shared between all instances, as opposed to static
where a member doesn’t belong to any instance.
Now, this is a semantical distinction between those keywords. It just so happens that these two distinct semantics tend to have the exact same effect.
Of course, static
in C# is today identical to Shared
in VB.NET but their legacy is different and VB’s Shared
simply has a different history and therefore historically a different meaning. With this meaning, it makes absolutely sense to access Shared
members via an instance.
It also makes sense when used together with Option Strict Off
(loose typing): here, you sometimes don’t know a variable’s type but you still might want to access a Shared
member. Now, you’ve got no choice but to use an instance to access it:
Option Strict Off
' … '
Dim o As Object = New A()
' Somewhere else, we want to access a static member of A but we don’t know A: '
Dim instance = o.Instance
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…