HOME -> プログラム -> VBScript -> VBS 基礎-7 クラス

VBS 基礎-7 クラス

VBScriptでクラスを作成する場合 class ~ end class を使用することになります。 以下、サンプル的にクラスを作成してみます。
dim sc
set sc = new sampleclass

sc.data1 = 100
sc.data3 = 30
sc.outMsg(1)
sc.outMsg(2)
sc.outMsg(3)

class sampleclass
	private	pdata1
	private pdata2
	public	data3
	
	public sub class_initialize()
		pdata1 = 10
		pdata2 = 20
	end sub
	public sub class_terminate()
	end sub

	public property Let data1(arg)
		if IsNumeric(arg) then
			pdata1 = arg
		else
			msgbox("数値ではありません")
		end if
	end property

	public property Get data1()
		data1 = pdata1
	end property
	
	public function outMsg(arg)
		select case arg
		case 1
			msgbox("1 is " & pdata1)
		case 2
			msgbox("2 is " & pdata2)
		case 3
			msgbox("3 is " & data3)
		end select
	end function
end class
 sampleclassというクラスを宣言して、その動作をみてみます。
クラスは set 変数名 = new クラス名 という形式で使用を開始します。 以降は set 変数名 で指定した変数名に .をつけてプロパティ(値)とメソッド(内部関数)にアクセスすることになります。 このサンプルクラスにはプロパティが3つ(pdata1、pdata2、data3)そしてアクセスできるメソッドが1つ(outMsg)あります。 VBScriptのクラスにおけるコンストラクタ(クラス作成時に自動で呼び出される関数)とデストラクタ(クラス廃棄時に自動で呼び出される関数)はそれぞれ class_initialize 、 class_terminate と名前付けします。 この二つは subプロシージャとなります。

プロパティはクラス内に設定値等を保持できる等使い道のある機能です。ようは変数なんですが、メソッドも同じですが public か private かの指定を行えます。 これはアクセスの権限を示すものです。public であればクラス外からもアクセスが可能(オブジェクト名.プロパティ or メソッド)ですが、privateの場合はクラス外からのアクセスはできません。 privateにはクラス内からのみアクセスする事になります。上記でいえば プロパティの pdata2 は private 指定を受けているので、コンストラクタ内では pdata2 = 20 とできますが、 外部から sc.pdata2 = 20 とするとエラーが発生します。外部からいじられたくない変数等はこのようにして隠蔽する事でクラスの扱いは格段に安心確実になります。

 クラス内にはそれ以外に property という宣言も見られます。これはそのままプロパティの宣言になります。 これを使用することで、値に格納する際にその処理を規定することができます。 上記の例では
	public property Let data1(arg)
		if IsNumeric(arg) then
			pdata1 = arg
		else
			msgbox("数値ではありません")
		end if
	end property
	public property Get data1()
		data1 = pdata1
	end property
 となっています。外部からは オブジェクト名.data1 というプロパティがあるように見えます。 ここでは pdata1 はprivate にしているので外部からのアクセスはできません。 そこでpropertyを利用しています。data1に渡された値をここでチェックを行っています(property let)。渡された値が数値かどうかをisNumeric関数で判定しています。 数値の場合のみ private の pdata1 に格納し、違う場合はエラー表示をおこなっています。 property getは値を取得する際に処理される項目です。上記の例ではただ単に値を返しているだけです。
 このようにして propertyを使用たりしてサニタイズを行う事によってクラスの堅牢性は飛躍的に増すことでしょう。

 上記のコードを実行した場合、ダイアログは3つ出力されるかと思います。 クラス内のプロパティを表示するようになっています。 data3 は public 指定なので sc.data3 = 30 で値が変更できています。 pdata1 は private 指定ですが、property let によって バイパスされていますので、 data1 = 100 とすることで pdata1 に値が設定されています。 唯一 pdata2 だけが外部からアクセス手段を持ちませんので、コンストラクタ内で指定された20という値を外部から変更する事はできません。 クラス内のメソッド(関数)としては outMsg が用意されています。  オブジェクト名.メソッド とすることで関数にアクセスできます(publicの場合)。


2008年 10月 9日ドキュメント作成
2008年 10月 9日ドキュメント更新