vb.net - 为什么我的代码在 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 显示警告消息“通过实例访问共享成员;限定表达式将不会 > 被评估”,但仍然可以正常工作
为什么它显示警告消息,我该如何解决?
解决方案
您会收到警告,因为_Func
isShared
和Shared
成员应该通过它们所属的类型而不是该类型的实例来访问。这个:
LibX._Func.Test()
试图_Func
通过类的实例Base
而不是类本身进行访问。那应该是这样的:
Base._Func.Test()
如果您希望您的_Func
字段是特定于实例的,则不要声明它Shared
,如果您不希望它是特定于实例的,则不要通过特定实例访问它。
请注意,这是一个警告而不是错误。如果您确实Shared
通过实例访问成员,那么系统将自动忽略该实例并使用该类型,但它会告诉您它正在这样做。这就是为什么您被告知限定表达式 ieLibX
将不会被评估的原因。这样做是因为有人可能会使用返回实例而不仅仅是变量的方法,并且不会调用该方法,因此该方法所做的任何其他事情都不会发生。
推荐阅读
- c# - 如何解决服务器上的“找不到路径的一部分..”问题
- java - 如何从字符串中查找值数据类型?
- python - 如何使用 Python 清除浏览器缓存?
- javascript - 如何分隔同一页面上的查询结果
- c++ - 无法退出 While 循环
- javascript - 将对象数组添加到现有对象
- java - Activity 加载时第一次获得 NullPointerException 但第二次工作正常
- php - CSV上传后将逗号分隔的字符串转换为两个字符串[PHP]
- c# - 将列表框项目转换为 datagridview 复选框列中的选中行
- python - 从一个列表中提取重复项的索引并从该索引中合并另一个列表的项