当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP开发中的(VBScript)类基础学习

ASP
asp实现取得数组中的最大值的代码
asp 将日期格式化为需要的格式
asp 下产生任意位数随机密码的代码
asp下返回以千分位显示数字格式化的数值
asp重定向页面的方法总结
asp下去除数组中重复的项的方法
asp下实现 重新排序数字数组的代码
asp 验证输入网址是否有效并可以访问 与正则验证输入网址
asp验证Ip格式的函数
asp实现生成由数字,大写字母,小写字母指定位数的随机数
asp 格式化sql中的like字符串
asp 实现显示所有的服务器变量值的函数
asp 取得用户真实IP,对代理地址仍然有效的函数
asp 通用数据库连接过程函数
asp 字符串截取函数
asp下实现格式化文件大小以MB显示的函数
asp 下用正则表达式检测邮箱格式的函数
asp 实现检测字符串是否为纯字母和数字组合的函数
asp代码实现检测组件是否安装的函数
asp通过JMAIL实现通用发送函数

ASP开发中的(VBScript)类基础学习


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 229 ::
收藏到网摘: n/a

关于ASP的(VBScript)类,首先ASP的(VBScript)类是由事件和方法(它们就是构成类的成员了)构成的。

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

下面我们来看一个例子

以下为引用的内容:

<script language=vbscript runat=server> 

Class myClass 
'//----声明(声明就是定义)myClass类的类内部(私有的[Private])变量 
Private strAuthor 
Private strVersion 
Private strExample 

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

Private Sub Class_Initialize() 
strAuthor = "思源" 
strVersion = "1.0" 
Response.Write "<br>myClass开始了<br>" 
End Sub 
'//----Class_Terminate()是类的结束事件,只要一退出该类,就会触发该事件,下面我们会该事件中设定退出该类时会在屏幕上显示该类已结束了。 

Private Sub Class_Terminate() 
Response.Write "<br>myClass结束了<br>" 
End Sub 

'//---------------------------用户自己定义的方法-------------------------------// 

'//----该方法返回一个版本信息 

Public Sub Information() 
Response.Write "<br>Coding By <a href='[email protected]'>Maxid_Zen</a> @ 

<a href='http://www.design60s.com'>www.design60s.com</a>.<br>" 
End Sub 

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

'//----定类的属性,该属性是让用户初始化strExapmle变量 

Public Property Let setExapmle(ByVal strVar) 
strExapmle = strVar 
End Property 

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

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

Public Property Get Version 
Version = strVersion 
End Property 

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

Public Property Get Author 
Author = strAuthor 
End Property 

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

Public Property Get Exapmle 
Exapmle = strExapmle 
End Property 

End Class 

</script> 
<% 

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

Dim oneNewClass 

Set oneNewClass = New myClass 

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

oneNewClass.setExapmle = "这是一个简单类的例子" 

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

oneNewClass.Information 

Set oneNewClass = Nothing 

%>

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

  如下面的代码:

以下为引用的内容:

<%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>

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

  理论上应该也会输出100,但是问题来了,ASP一直会报错:

  Microsoft VBScript runtime error '800a01b6'

  Object doesn't support this property or method: 'n.Content'

  用n.Type也会出错。同样的代码翻译成PHP,运行却是可以通过的。为什么?

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

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