03.コレクションで、For..Each の element に指定した

Dim objCheck As Object

ですが、オブジェクト型変数であるため、コンパイル時にエラーになりませんし、レイトバインドになりますから、少し遅くなります。

それを解決するのが Implements キーワードです。

クラスプログラミングの概念の中に、「インターフェイス」というものがあります。
Implements キーワードは、インターフェイスを実現します。

具体的には、メソッドや、プロパティなどの雛形となるクラスを作成し、それを Implements で参照することで02.処理の画一化を実現するのです。

ちょっと難しいですが、順を追って作成していきましょう。

まずは雛形となるクラス(ICheck)を作成します。
このクラスは、Clear というメソッドと、Check というメソッドを持たせます。 この中には、宣言だけで、コーディングは何も行いません。

ICheck.cls

Option Explicit

Public Sub Clear()

End Sub

Public Function Check() As Boolean

End Function

得意先チェックのクラス CTokui.cls を作成してみましょう。

CTokui.cls

Option Explicit
Implements ICheck

と、ここまで書いたところで、コードウインドウの左上、フォームの場合にはコントロール名が表示される位置には、「ICheck」と表示されるはずです。

codewindow.gif

「ICheck」を選択するとメソッドの選択肢が表示されます。

codewindow2.gif

すべてのメソッドを選択し、記述します。

CTokui.cls

Option Explicit

Implements ICheck

Private Function ICheck_Check() As Boolean
    '得意先コードをチェックし、得意先名を表示する処理を書きます。
End Function

Private Sub ICheck_Clear()
    '得意先コードと得意先名をクリアする処理を書きます。
End Sub

と、この様に作成されたクラスは、ICheck が持っているメソッドやプロパティを必ず備えることになります。

したがって、次のように、ICheck 型と定義した変数で受けることができるのです。

   Dim tokui As ICheck
   Set tokui = New CTokui
   tokui.Check

これを応用すると、03.コレクションの AllCheck は

Public Function AllCheck() As Boolean
   Dim objCheck As ICheck
   For Each objCheck In colChecks
       If Not objCheck.Check() Then Exit Function
   Next
   AllCheck = True
End Function

のように書くことができます。

メリットとしては、
・変数で受けたときにバインド解決されるので高速である。
・メソッド名を間違えるとコンパイルエラーになる。
・インテリセンスが出るので間違えにくい。
・画一化された処理を構築しやすい。(実装し忘れるとコンパイルエラーになる)

という点が上げられます。

ずらずらあげましたが、要は、Object 型で記述していると、実行するまでわからないが、Implements を使うと、コンパイラがチェックしてくれるし、速くなるよ! ということ。(^_^;)

Implements キーワードは、ひとつのクラスの中に複数記述することができます。

Implements ICheck
Implements ICheck2

とすると、ICheck のインターフェイスとICheck2のインターフェイスを両方持つことになります。




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2009-10-31 (土) 00:04:26 (2913d)