假设我在class1.vb中有这样的类:
Public Class my_class
Public Sub my_sub()
Dim myvar as String
myvar = 10
Session("myvar") = myvar
End Sub
End Class
然后我有一个带有代码隐藏文件的ASP.NET页面,default.aspx和default.aspx.vb,我想调用my_class。我正在做以下事情,但它不起作用:
Imports my_app.my_class
Partial Public Class _default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs) Handles Me.Load
my_class()
End Sub
End Class
我得到“对非共享成员的引用需要对象引用”
答案 0 :(得分:3)
尝试导入包含类的命名空间,而不是类本身。
所以不要这样:
Imports my_app.my_class
这样做:
Imports my_app
VB.NET将名称空间导入文件范围,以帮助编译器解析不完全限定的类型名称。这意味着您可以自由地使用此代码文件中my_app
命名空间中声明的所有类型,而不使用my_app
作为类型名称的前缀。
好的,完成后,您需要切换Page_Load
的内容以创建my_class
的实例,如下所示:
Dim foo As New my_class
my_class.my_sub()
现在你有一个名为my_class
的{{1}}实例,你可以在其上调用实例方法。
您可以做的另一件事是使foo
成为my_sub
方法,这样您就不必创建实例了:
Shared
如果您这样做,那么您无需创建Public Shared Sub my_sub()
的实例来致电my_class
- 您可以直接致电my_sub
:
my_sub
答案 1 :(得分:2)
Imports my_app.my_class
Partial Public Class _default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs) Handles Me.Load
Dim myClass as new my_class()
myClass.my_sub()
End Sub
End Class
答案 2 :(得分:1)
你的意思是你想在my_class上调用my_sub()吗?您可以将其标记为共享方法,以便可以将其称为my_class.my_sub()
或
实例化它的一个实例:
Dim myclass as new my_class()
myclass.my_sub()