| 基礎解説 チェック式 WSH入門 第9回 3.クラスを自作するMicrosoft MVPVisual Developer - Scripting 牟田口 大介 2007/02/15 |
![]() |
|
|
|
さて、ここまででオブジェクトとは何かについて述べ、実際にオブジェクトを使う例(Errオブジェクト)をお見せした。次は、オリジナルのオブジェクトを作る方法について述べたい。
クラスの自作―Classステートメント
VBScriptではClassステートメントを用いて独自のクラスを記述することができる。もちろん、記述したクラスはインスタンス化することができ、オブジェクトとして扱える。
読み書き可能なただ1つのプロパティCaptionを持つクラス、Sampleを宣言し、それをインスタンス化するには次のように記述する。
Option Explicit |
このスクリプトを実行すると、次のようなメッセージ・ボックスが表示される。
![]() |
| Sampleクラスをインスタンス化 |
| クラスをインスタンス化し、生成したオブジェクトのプロパティに値を代入・値の読み込みを行っている。 |
クラスはClass <クラス名> 〜 End Classの間に記述する。ここではCaptionプロパティを持たせたいので、Publicステートメントを用い、パブリック変数を宣言する。PublicステートメントはDimステートメントのクラス版のようなもので、クラスの外部から読み書き可能な変数、すなわちプロパティを定義するものである。
実際にこのクラスを使うには、まずこのクラスのオブジェクトを格納するためのオブジェクト変数を定義する。これは普通の変数定義と同様であるが、ここではオブジェクト(Object)変数であることを明確にするため、接頭辞「obj」を用いている。
次にSetステートメントでNewキーワードを使用して、Sampleクラスをインスタンス化している。これでobjSample1というオブジェクト変数にSampleクラスのインスタンス(オブジェクト)が格納された。
あとはErrオブジェクトの場合と同様であり、値を代入したり、値を読み込んだりすることが可能である。
そして最後にSetステートメントでNothingという特殊な値を代入することで、オブジェクトを破棄している。WSHにおいては、スクリプト終了時にすべてのオブジェクト変数に格納されたオブジェクトは解放されるので、このスクリプトでは必ずしも必要ではないが、使わなくなったオブジェクトはその時点でNothingにしておくのが望ましい。
このように、VBScriptではオブジェクト変数にオブジェクトや値を代入する際はSetキーワードを使うのが決まりであるので覚えておいてもらいたい。
ちなみに、VBScriptにはデフォルトで存在するクラス、RegExpクラスというものがある。これは、正規表現という文字列を便利に扱うための機能を提供するものだが、デフォルトで存在するので、Classステートメントがなくても
Set objRegExp = New RegExp |
としてインスタンス化することが可能である。本連載では正規表現については取り上げないが、興味がある方はヘルプなどを参照してもらいたい。
- RegExp オブジェクト(MSDNライブラリ)
- Regular Expression オブジェクトのプロパティとメソッド(MSDNライブラリ)
次に、1つのクラスに対して複数のオブジェクトを作成できることを確認しよう。Classステートメントはそのままで、続きを以下のように変えてみたものを実行してもらいたい。
'オブジェクト変数の宣言。 |
このスクリプトを実行すると次のようなメッセージ・ボックスが表示される。
![]() |
| 1つのクラスに対し複数のオブジェクトを生成した例 |
| クラスは1つだが、それに対して複数のオブジェクトが生成可能である。 |
この例ではobjSample1とobjSample2という2つのオブジェクト変数を宣言し、それぞれにSampleクラスのインスタンスを代入している。これらはそれぞれ独立したプロパティ値を持てることが確認できる。
Property Getステートメント、Property Letステートメントを用いたプロパティの定義
Captionプロパティに値を代入する際に何か処理を加えたい場合などは、Publicステートメントの代わりにProperty Getステートメント、Property Letステートメントを用いる。先ほどのスクリプトのClassステートメントの部分だけ次のように書き換えて実行してみてもらいたい。同じ結果が得られるはずである。
Class Sample |
まず、先ほどとは違い、Privateステートメントを用い、クラスの外部からは参照も書き込みもできない変数(プライベート変数)、m_strCaptionを宣言している。この変数はクラスの内部でのみ読み書きが可能である。プライベート変数は「m_」という接頭辞を付けるのが慣例である。
Property Letステートメントは、そのクラスがインスタンス化される際、プロパティに値が代入されるときに実行される。代入された値は引数(ここではValue)に格納されるので、先ほど宣言したプライベート変数にその値を代入する。この際、パブリック変数でプロパティを定義したときとは違い、Valueに対してさまざまな処理が可能である。例えばTrim関数を使って前後のスペースを取ったり、長すぎる文字列が格納されそうになったときにエラーを発生させたりすることができる。
Property Getステートメントは、そのクラスがインスタンス化された際、プロパティの値が参照されるときに実行される。ここでは、プロパティ名であるCaptionにプライベート変数m_strCaptionを代入することでオブジェクトに対しプロパティの値を返すことが可能になる。
ここで、Public Default Property Get CaptionのようにするとCaptionプロパティは既定のプロパティになり、読み込む際に「.Caption」を省略することができる。
なお、Property LetステートメントおよびProperty Getステートメントにおいて、Publicキーワードは省略可能である。逆にプライベートな(クラス内でのみ参照可能な)プロパティを宣言するにはPrivateキーワードを併用する。
読み込み専用(値の設定はできない)プロパティにするには、単にProperty Getステートメントのみ記述し、 Property Letステートメントを記述しなければよい。だがそのままだと値が設定できないプロパティは参照しても単にEmpty値を返すだけなので、ここではインスタンス化されるタイミングで既定の値を格納しておくことにする。それにはInitializeイベント(コンストラクタともいう)を定義する。
Option Explicit |
Private Sub Class_Initialize()とEnd Subの間にコンストラクタを記述する。ここではm_strCaption変数に文字列を代入している。この部分はクラスがインスタンス化されるタイミングで実行されるので、その後、プロパティを参照するとコンストラクタで格納した文字列が取得できるというわけである。
| INDEX | ||
| [基礎解説]チェック式 WSH入門 | ||
| 第9回 VBScriptのオブジェクトを使いこなす | ||
| 1.オブジェクトとは | ||
| 2.VBScriptにおけるエラー処理 | ||
| 3.クラスを自作する | ||
| 4.メソッドを定義する | ||
| 基礎解説 |
TechTargetジャパン
- WebサーバのSSL証明書が「正しい」か確認する (2012/2/10)
SSLに必要なサーバ証明書の取得/インストールのミスはWebサイトの信頼を失墜させかねない。証明書ベンダ提供のツールで手軽かつ確実にチェックしよう - クライアントでも利用可能になるHyper-V 3.0とは? (2012/2/9)
Windows 8では、従来のWindows Virtual PCに代わって新しくHyper-V 3.0がクライアント向けにも導入される。その概要を解説 - 第303話 ペアプロ2 (2012/2/7)
あっ、またまたいつぞやの幽霊が! …っと思ったら、何だ倉井さんかぁ…。はぁー、驚いた… - Excelで郵便番号変換ウィザードを活用する (2012/2/3)
Excelで管理している顧客名簿などで、不足している郵便番号や住所を入力するのは意外と面倒。郵便番号変換ウィザードを使えば、これらの入力が簡単になる
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



