应miles的要求,同时也作为类设计的一个例子,我把我设计日期类的过程整理出来,写成这篇文章,供大家做个参考。也希望这篇文章能抛砖引玉,让大家写出更好,更多的类来。文中有不尽的地方,还请指正。
(一)vbscript自定义类
简单的说,类就是对象,它具有属性和方法。在vbscript里自定义类比c++,java要简单得多。下面将设计一个日期类,用来显示出组合的表单对象。在设计的同时,我们也会说明如何设计自定义类。
1、定义类的语法:class….end class
class及end class用来标识类块的开始和结束,class 标识符后面跟着的是类名称。现在我们把要设计的日期类命名为:dateclass 语法如下:
class dateclass
…
end class
在vbscript中使用些类建立新对象时,可以用new运算符。例如:
set newdate=new dateclass
2、属性和方法:private、public和property
private 用来定义仅能在类内部访问的变量和函数;public则用来定义类的界面,也就是可供外部访问的属性和方法,没有成为 private和public的成员,一律视为public;有和时候,我们要让外部可以访问,但是要指定访问的方法,这时候,就要用property,property语法如下:
public property [let|set|get] aa(…)
…
end property
property 必须和 let、set或get 配合使用。说明如下:
let 设置值,如:user.age=100
set 设置对象,如:set user.myobject=nobject
get 取得值,如:myage=user.age
3、设计日期类的属性和方法
现在我们来设计日期类的属性。为了显示日期,定义一个classdate,来存放日期,它的类型是public,这样可以让用户在类外部改变它;再设计一个函数来显示日期,取名为:datedisplay,类型为public,没有参数。程序如下:
<%
class dateclass
public classdate
public function datedisplay()
end function
end class
%>
4、加入显示日期的代码
现在我们来加入datedisplay的代码,程序如下:
<%
class dateclass
public classdate
public function datedisplay()
如果没有指定日期,那么设为当前日期
if classdate="" then
classdate=now()
end if
yy=year(classdate)
mm=month(classdate)
dd=day(classdate)
response.write "<input type=text name=yy size=4 maxlength=4 value="&yy&">年"&vbcrlf
response.write "<select name=mm>"&vbcrlf
for i=1 to 12
if i=mm then
response.write "<option value="&i&" selected>"&i&"</option>"&vbcrlf
else
response.write "<option value="&i&">"&i&"</option>"&vbcrlf
end if
next
response.write "</select>月"&vbcrlf
response.write "<select name=dd>"&vbcrlf
for i=1 to 31
if i=dd then
response.write "<option value="&i&" selected>"&i&"</option>"&vbcrlf
else
response.write "<option value="&i&">"&i&"</option>"&vbcrlf
end if
next
response.write "</select>日"&vbcrlf
end function
end class
%>
把上面的代码存为dateclass1.asp 好了,现在我们已经写好了这个日期类,下面来看看使用的情况
5、调用类 include
在其它程序中使用这个类,只要用include 把dateclass1.asp包含进来。下面我们写一个测试的程序,文件名为 test1.asp
<!–#include file="dateclass1.asp" –>
<%
set newdate= new dateclass
response.write "调用显示:<br>"
newdate.datedisplay
response.write "<br>显示classdate的值:<br>"
response.write newdate.classdate
response.write "<br>设置classdate的值:<br>"
newdate.classdate=cdate("2005/6/15")
上一句也可以写成:
newdate.classdate="2005/6/15"
response.write "<br>再调用显示:<br>"
newdate.datedisplay
set newdate=nothing
%>
把两个文件放在同一个目录下,运行test1.asp 好了,应该已经看到结果了。但是这样的设计还有一些问题:
1、如果用户指定的classdate不是日期型,那么日期就会变成1900年1月1日;
2、如果显示多个日期,表单对象的名字不能是一样的;
3、最好加入css;
4、最好还能加入闰年的判断;
5、不是每个月都有31天;
带着这些问题,我们将会继续……..