精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 群件>>开发>>脚本LotusScript>>Notes类的继承和包含

主题:Notes类的继承和包含
发信人: [email protected]()
整理人: kamkam(2002-05-01 23:52:56), 站内信件

Notes类的继承和包含
-------------------
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.

我们编程时应该注意这一点。
------------------------
敬请关注NotesFAQ站

--
黑夜的尽头是些许的灯光
通往理想的路是如此的艰辛。
面对荆棘,我只有奋然的前行

※ 来源:.网易虚拟社区北京站 http://bj.netease.com.[FROM: 202.96.167.50]

[关闭][返回]