Vbscript 如何使用存储在应用程序中的类?
我定义了这样一个类:Vbscript 如何使用存储在应用程序中的类?,vbscript,asp-classic,Vbscript,Asp Classic,我定义了这样一个类: Class Foo Public SomePublicProperty Public Function init(p_somePublicProperty) set init = Me SomePublicProperty= p_somePublicProperty End Function End Class 然后在我的global.asaApplication\u OnStartlke中使用它: Dim fo
Class Foo
Public SomePublicProperty
Public Function init(p_somePublicProperty)
set init = Me
SomePublicProperty= p_somePublicProperty
End Function
End Class
然后在我的global.asaApplication\u OnStart
lke中使用它:
Dim fooInstance
Set fooInstance = New Foo.init("Some data")
fooArray = Array(fooInstance)
Application("fooArray") = fooArray
这很好,但当我在另一个页面上从应用程序存储中获取值时,我无法获取属性
fooArray = Application("fooArray")
fooArray(0).SomePublicProperty 'This line returns an error - Object doesn't support this property or method
我已经试着把类定义放到第二页,但是没有用
我错过了什么
我刚刚发现了一个问题。我假设相同的规则重新序列化同样适用于应用程序对象,对吗?所以我不应该试着这样做?不幸的是,你不能这样做,下面是我能找到的关于原因的最好解释 从
这是因为VBS类不是真正的类。它们实际上只是内存中的信息集合,无法保证(例如)存储在一个页面中的实例与另一个页面中的类定义几乎匹配 这与使用
Server.CreateObject()
COM对象不同,COM对象可以从应用程序和会话中存储和检索
你有两个选择
- 在结构化字符串中自己序列化对象,然后在需要时使用该字符串来反序列化对象
- 为VBScript类创建COM包装,并停止使用
class
语句。由于COM对象可以存储在应用程序
和会话
对象中,因此只要COM类是单线程的,就应该可以工作
- 将您的类转换为
数组
,然后改用它
有用的链接
-
-
fooArray
是一个数组,因此没有Set
@Ekkehard.Horner修改了答案。