aspvbscript:ASP的(VBScript)类基础



有关ASP(VBScript)类
首先ASP(VBScript)类是由事件和思路方法(它们就是构成类成员了)构成

在Class块中成员通过相应声明语句被声明为Private(私有成员只能在类内部)或Public(公有成员可以在类内外部)被声明为Private将只在Class块内是可见被声明为Public不仅在Class块内部是可见对Class块的外代码也是可见没有使用Private或Public明确声明被默认为Public在类块内部被声明为Public过程(Sub或Function)将成为类思路方法Public变量将成为类属性同使用PropertyGet、PropertyLet和PropertySet显式声明属性缺省属性和思路方法是在它们声明部分用Default关键字指定

下面我们来看个例子

<scriptlanguage=vbscriptrunat=server>

ClassmyClass
\'//----声明(声明就是定义)myClass类类内部(私有[Private])变量
PrivatestrAuthor
PrivatestrVersion
PrivatestrExample

\'//---------------------------定义类事件-------------------------------//
\'//----Class_Initialize是类化事件只要开始使用该类首先会触发该部分执行下面我们会在该成员中化该类作者和版本以及在屏幕上显示下该类已经开始了

PrivateSubClass_Initialize
strAuthor=\"思源\"
strVersion=\"1.0\"
Response.Write\"<br>myClass开始了<br>\"
EndSub
\'//----Class_Terminate是类结束事件只要退出该类就会触发该事件下面我们会该事件中设定退出该类时会在屏幕上显示该类已结束了

PrivateSubClass_Terminate
Response.Write\"<br>myClass结束了<br>\"
EndSub

\'//---------------------------用户自己定义思路方法-------------------------------//

\'//----该思路方法返回个版本信息

PublicSubInformation
Response.Write\"<br>CodingBy<ahref=\'[email protected]\'>Maxid_Zen</a>@

<ahref=\'http://www.design60s.com\'>www.design60s.com</a>.<br>\"
EndSub

\'//---------------------------定义类输出属性-------------------------------//

\'//----定类属性该属性是让用户化strExapmle变量

PublicPropertyLetExapmle(ByValstrVar)
strExapmle=strVar
EndProperty

\'//---------------------------定义类输出属性-------------------------------//[Page]

\'//----定义类属性该属性是返回个版本号

PublicPropertyGetVersion
Version=strVersion
EndProperty

\'//----定义类属性该属性是返回该类作者号

PublicPropertyGetAuthor
Author=strAuthor
EndProperty

\'//----定义类属性该属性是返回个版本号

PublicPropertyGetExapmle
Exapmle=strExapmle
EndProperty

EndClass

</script>
<%

\'//-------这里是使用该类例子

DimoneNewClass

SetoneNewClass=NewmyClass

Response.Write\"作者:\"&oneNewClass.Author&\"<br>\"
Response.Write\"版本:\"&oneNewClass.Version&\"<br>\"

oneNewClass.Exapmle=\"这是个简单类例子\"

Response.Write\"用户自定义:\"&oneNewClass.Exapmle&\"<br>\"

oneNewClass.Information

SetoneNewClass=Nothing

%>

ASP中Session本身是可以储存对象它可以保存基本变量自动化对象(AutomationObject)等但在储存自定义类对象时会碰到问题



如下面代码:
<%
Ifisempty(Session(\"node\"))ThenSetSession(\"node\")=NewListNode
Setn=Session(\"node\")
Response.Writen.Content
%>

  还是上面ListNode这个类这段代码意图在个用户会话中只保留个ListNode对象所以在用户第次访问该网页时会生成ListNode个对象并保存在Session(\"node\")中;后面访问该网页时Session(\"node\")不为空了所以不会生成个新对象而是到Session(\"node\")中取出保存对象

理论上应该也会输出100但是问题来了ASP直会报错:
MicrosoftVBScriptruntimeerror\'800a01b6\'
Objectdoesn\'tsupportthispropertyormethod:\'n.Content\'
用n.Type也会出错同样代码翻译成PHP运行却是可以通过为什么?

  个人分析下来认为Session可以保存对象是没错只是VBScript中类型转换机制太弱而且没有显式强制类型转换供用户使用无法将Session(\"node\")正确转换为ListNode类型是自定义我们只能在每个页面中都出现类定义语句这样在ASP看来每次读取这个页面时ListNode类都是个新类所以就不认得Session中这个类对象了

  结论:尽量不要想到用Session或Application来存储ASP中自定义类对象如果确实需要可以考虑用COM来编写类然后在VBScript中用:SetSession(\"obj\")=Server.CreateObject(\"YourApp.YourClass\")来创建个对象然后即可实现上面预想功能了[Page]

Tags:  vbscript.dll vbscript vbscript中的类 aspvbscript

延伸阅读

最新评论

发表评论