为什么不通过实例变量访问共享/静态成员?

Rob*_* P. 8 .net c# vb.net

这是我正在谈论的一个例子......

Public Class Sample1

    Public Shared Function MyValue() As Integer
        Return 0
    End Function

    Public Sub Code()
        Dim ThisIsBad = Me.MyValue
        Dim ThisIsGood = Sample1.MyValue
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

Me.MyValue在VB.NET中发出警告并且(等效代码给出)C#中的错误.这有什么特别的原因吗?我发现使用'Me.MyValue'访问共享函数更直观/自然 - 但我避免它将我的警告保持为0.

其他人只是决定'不,从另一个角度来做更有意义',还是有一些我不理解的技术原因?

编辑:

感谢大家.我认为它错了,更像是OOP中的"子类".即使在基类中声明了某些内容,也可以通过您拥有的实例访问它.但这种关系与共享或静态不同.

Ada*_*kis 7

根据定义,静态成员是在级别而不是实例级别声明的,因此使用this(或me在VB中)访问静态成员并不是真正感觉正确(并且在C#中不正确)

this.something(或me.something)意味着您正在访问特定于该特定实例的"某些东西",而同样,静态成员在该类的所有实例中共享.

  • 一条评论.我要说的完全一样,所以我只是提高了你的意思.:) (2认同)