クラスを利用する際は New を使用してインスタンスを作成します。
| Dim oEmp As New Employee |
このタイミングで実行される特殊なメソッドがあります。オブジェクト指向の世界では『コンストラクタ』と呼ばれるのですが、簡単に言うとクラスの初期化処理を記述するメソッドです。
LotusScript とクラスの初期化
LotusScript では、”New” という固定された名称のメソッドがコンストラクタとして使用されます。どのユーザ定義クラスであっても New メソッドとなるのでわかりやすいですね。
New はメソッドですから通常のメソッドと同様にクラス内に記述します。
|
Public Class Employee Private zvBD As Variant Sub New() zvBD = DateNumber(2000, 1, 1) End Sub ・・・ End Class |
このサンプルではメンバ変数 zvBD に 2000/1/1 という日付値をセットしています。
New メソッドと引数
NotesDatabase クラスを New する際にはサーバ名とファイル名を引数にセットします。
| Dim ndb As New NotesDatabase("Server1/Domino", "Sample.nsf") |
これと同様のことがユーザ定義クラスでも可能です。実現方法は New メソッドに引数を指定するだけです。
例えばすでに従業員情報を管理するノーツデータベースがあったとします。前回までサンプルにしていた Employee クラスがこの DB から情報を取得する場合、次のようなイメージになります。
|
Public Class Employee Private zsEmpNo As String '社員番号 Private zvBD As Variant Sub New(ByVal vsEmpNo As String) Dim ndEmp As NotesDocument Set ndEmp = xGetEmpDoc(vsEmpNo) If Not(ndEmp Is Nothing) Then '従業員の情報をメンバ変数にセット zvBD = ndEmp.Birthday(0) zsEmpNo = vsEmpNo End If End Sub Private Function xGetEmpDoc(ByVal vsEmpNo As String) As NotesDocument '社員番号から従業員の文書を取得 ・・・ End Function ・・・ End Class |
まず、インスタンスを初期化する際に社員番号を引数で与えます。社員番号から従業員データベースを検索し文書を取得します。その文書内の誕生日をメンバ変数 zvBD に保存しています。
クラスを利用する側では、次のように宣言することになります。
| Dim oEmp1 As New Employee("00123") |
ディストラクタ
コンストラクタと対になる機能としてインスタンスが消滅する際に実行される処理があり、ディストラクタと呼ばれます。
LotusScript では、Delete という名称のメソッドとなります。
|
Public Class Employee ・・・ Sub Delete() 'ディストラクタをここに記述 ・・・ End Sub ・・・ End Class |
私はあまり使用経験がないのですが、後片付けが必要なクラスで利用すると、もれなく処理を行えるので便利です。
まとめ
今回はクラスを初期化する機能を中心に、コンストラクタとディストラクタについて紹介しました。LotusScript の文法では、それぞれ New と Delete と名称が固定されたメソッドで記述します。
どちらも省略可能で、メソッド自体を定義しないと省略したことになります。
| 前回 | クラス化に挑戦 | 次回 |
0 件のコメント:
コメントを投稿