static/Shared in VB.NET and C# visibility

后端 未结 3 1552
北恋
北恋 2020-12-03 18:36

I have faced with a situation in VB.NET and C# (.NET2) with the visibility of the static/shared members. It seems to me a little strange in VB.NET:

    publi         


        
3条回答
  •  隐瞒了意图╮
    2020-12-03 19:00

    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
    

提交回复
热议问题