首页 > 解决方案 > 为什么我的代码在 ide 中显示警告消息“通过实例访问共享成员;将不评估限定表达式”

问题描述

我创建类


'MyLib.aspx
Namespace MyLib
  Public Class Base

    Public Shared _XPage As Page
    Public Shared _Func  As FuncClass

    Public Shared Property XPage() As Page
      Get
          Return _XPage
      End Get
      Protected Set(Val as Page)
          _Page = Val
      End Set
    End Property 

    Public Sub New(ByVal Page As Page)
      XPage = Page
    End Sub
  End Class

  Public Class FuncClass : Inherits Base

    Public Sub New()
        MyBase.New(_XPage)
    End Sub

    Public Function Test() As String
        Return "Test"
    End Function
  End Class
End Namespace

我试试...


'ASPX_Page.aspx
Import MyLib

Partial Class ASPX_Page

  Private ReadOnly LibX As Base = New Base(Me)

  Protected Sub Button1_Clcik(sender As Object, e As EventArgs)
  Handles Button1.Clcik

    'Access of shared member through an instance; 
    'qualifying expression will not be evaluated
     LibX._Func.Test()

  End Sub
End Class

IDE 显示警告消息“通过实例访问共享成员;限定表达式将不会 > 被评估”,但仍然可以正常工作

为什么它显示警告消息,我该如何解决?

标签: vb.net

解决方案


您会收到警告,因为_FuncisSharedShared成员应该通过它们所属的类型而不是该类型的实例来访问。这个:

LibX._Func.Test()

试图_Func通过类的实例Base而不是类本身进行访问。那应该是这样的:

Base._Func.Test()

如果您希望您的_Func字段是特定于实例的,则不要声明它Shared,如果您不希望它是特定于实例的,则不要通过特定实例访问它。

请注意,这是一个警告而不是错误。如果您确实Shared通过实例访问成员,那么系统将自动忽略该实例并使用该类型,但它会告诉您它正在这样做。这就是为什么您被告知限定表达式 ieLibX将不会被评估的原因。这样做是因为有人可能会使用返回实例而不仅仅是变量的方法,并且不会调用该方法,因此该方法所做的任何其他事情都不会发生。


推荐阅读