Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 如何使用存储在应用程序中的类?_Vbscript_Asp Classic - Fatal编程技术网

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.asa
Application\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修改了答案。