Notes类的继承和包含

作者:www.chinaitpower.com | www.chinaitpower.com
原著:丁香书

Lotus Script是一种面向对象的语言。
使用它时,需要理解Notes类的继承和包含。

1.继承
比较容易理解。所谓类的继承,子类(派生类)继承其父类的属性和方法。
比如 NotesRichTextItem 是 NotesItem 的子类,所以 NotesRichTextItem
类的实例(对象)可以使用 NotesItem 的所有属性和方法。

2.包含
这个概念不太好理解。
所谓包含是一种概念上的包含,即Notes的对象是一个容器(container),它
包含了其中的对象。例如,我们使用 NotesSession 对象来创建 NotesDatabase
  
对象,并且 NotesDatabase 对象创建 NotesDocument 对象。这是因为
NotesSession 包含了 NotesDatabase,而 NotesDatabase 包含了 NotesDocumen
t。
关闭一个容器(container),它其中的对象也会被关闭。
这使得我们很多时候 使用Lotus Script 编程时会有疑惑,明显的得到了对象
突然就变为Null了,这是为什么啊?
请见下面一段程序:
Sub Click(Source as Button)
     Dim session as New NotesSession
     Dim db as NotesDatabase
     set db = session.GetDatabase(servername , dbname)
'     set getDocs = db.Alldocuments
     Dim dc1 as NotesDocumentCollection
'     set dc1 = getDocs("Myserver" , "MyTestDb.nsf")
     Set dc1 = db.Alldocuments
     msgbox "Ok It's Work Well!"
End Sub
会发生什么结果呢?
你会看到一个窗口。"OK It's Work Well!"
然而你把上面一段程序写成
Function getDocs(servername As String , dbname As String) as NotesDocu
mentCollection
     Dim session as New NotesSession
     Dim db as NotesDatabase
     set db = session.GetDatabase(servername , dbname)
     set getDocs = db.Alldocuments
End Function

Sub Click(Source as Button)
     Dim dc1 as NotesDocumentCollection
     set dc1 = getDocs("Myserver" , "MyTestDb.nsf")
     msgbox "Ok It's Work Well!"
End Sub
会发生什么结果呢?
实际上这个程序运行时,会产生一个“Object Not Set”的运行错误!
尽管这时在逻辑上看不出区别。但实际上是错误的。
因为 db 在函数 getDocs中得到的,退出了getDocs函数,就自动关闭了,
而此时 db 包含的文档集合也关闭了。所以会产生运行错误。
(当然这也涉及到变量的工作范围,用在这里只表示一下包含的关系)
还有许多情况是这样的:
比如  
set doc = db.createdocument
之后 set db = .......
此时 db先关闭,在重新设置,doc 也自动关闭,值为Null.  
--------
原著:丁香书

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值