| 基礎解説 チェック式 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ジャパン)
- 第207話 究極の人事システム (2010/2/9)
部長、わが人事部が開発した究極の人事評価システムがついに完成しました! これで不要な社員が一発で分かります! - WindowsTIPS (2010/2/5)
− netshコマンドでTCP/IPのパラメータを設定する
− Virtual PC 2007の共有NATで利用可能なアドレス範囲
− スタンバイ復帰でパスワード入力を要求されないように - 仮想環境でActive Directoryを利用する (2010/2/4)
仮想環境にADをインストールすれば、自由にActive Directoryドメイン・ネットワークを構築して実験できる - 第206話 バナー広告案 (2010/2/2)
いまどきWebマーケティングが不可欠なのは分かるが、強烈な競合に並べてバナーなんか出して、勝ち目はあるのか?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |









