2024/05/14

クラス化に挑戦: #2)クラス定義のステートメント

クラス定義に必要なステートメントの基本的な使い方とユーザ定義クラスの基本的な構造についてまとめます。


使用するステートメント

クラス定義に使用するステートメントは主に次の通りです。

ステートメント 役割
Class クラスをユーザ定義します。
Property Get/Set クラスにプロパティを定義します。
Function
Sub
クラスにメソッドを定義します。

Function と Sub については、クラス定義以外でも使用するので、なじみがあると思います。


クラスの定義

まずはクラスの定義方法です。

Class ステートメントで記述を開始し、クラス名を指定します。以下の例では Employee がクラス名となります。そして、Class ~ End Class の間に作成するクラスの中身を記述します。

Class Employee
   (クラスの定義を記述)
End Class

ドミノデザイナーでは、クラスを作成すると左側のオブジェクトのリストに追加されます。


プロパティとメンバ変数

プロパティはインスタンスに対して値の取得と設定ができます。Property の後ろに Get をつけるとプロパティから値を取得でき、Set でプロパティに値を設定できるようになります。また、As 以降でプロパティの型を定義します。下記の例では、Birthday というプロパティは Variant 型で設定と取得ができる定義となっています。

Class Employee
   zvBD As Variant

   Property Get Birthday As Variant
       Birthday = zvBD 
   End Property
   Property Set Birthday As Variant
       zvBD = Birthday 
   End Property
End Class

当たり前ですが、Get / Set とも同じ型になります。なお、Property は Get だけを記述すると取得のみ、Set だけだと設定のみのプロパティとなります。


Class ステートメント直下には変数を宣言できます。この変数はインスタンス内の値を保持するエリアとして使用されます。

Property Get / Set ステートメントではプロパティ名が値のインターフェースとなります。例えば Set の場合は、Birthday にコール元の値が入ってきます。メンバ変数 zvBD をセットすることでインスタンス内に保持させています。


メソッド

値を返すメソッドの作成には Function、戻り値が不要の場合は Sub ステートメントを使用します。Class ステートメント内に記述すること以外は、通常の関数作成とほぼ同様です。以下の例では使用していませんが、引数を定義することもできます。

違いがあるとすれば、メンバ変数にアクセスできることが挙げられます。

Class Employee
      ・・・
   Function GetAge() As Integer
      Dim iAge As Integer

      ' 現在日付と誕生日(zvBD)から年齢を計算
      iAge = ・・・   

      GetAge = iAge   '戻り値をセット
   End Function
End Class


デザイナーとユーザ定義クラス

ここまで作成するとデザイナーでは次のように表示されます。

作成したプロパティやメソッド、メンバ変数はクラス配下のエントリとしてリストされます。リストはソートされており、クリックするとその部分のソースコードが表示できるので、効率的に開発できますね。


クラスの利用

ユーザ定義型クラスは、以下のように変数宣言の New でインスタンスが作成できます。

   Dim oEmp As New Employee

そして、定義済みのクラスと同様に、"."(ピリオド)を入力することにより、プロパティやメソッドにアクセスできます。


前回 クラス化に挑戦 次回


0 件のコメント:

コメントを投稿