|
|
連載:VB 6ユーザーのための これならマスターできるVB 2005超入門
第9回 そろそろまじめにクラスに取り組んでみようか
羽山 博
2007/06/06 |
|
|
さて、ここで、最初に話した内容について思い出してほしい。
XmlDocumentクラスの場合は、
doc.GetElementsByTagName(……)
|
|
のように、「オブジェクト名.メソッド名」と書くのに、Stringクラスの場合は、
のように「クラス名.メソッド名」と書く……という話だ。これはStringクラスだから、「クラス名.メソッド名」と書くわけではなく、そのメソッドがここまで見てきたのと同じように、クラスで共通に使えるものだからだ。クラスで使えるものだから、別にオブジェクト(インスタンス)を作らなくても使えるというわけだ。
これで、かなりモヤモヤが晴れたのではないかと思うが、どうだろう。
実は、このようなプロシージャ(メソッド)は「スタティック(静的)なメソッド」と呼ばれており、.NET Frameworkのクラス・ライブラリ・リファレンスでは「S」のマークが付けられている(図7)。
|
図7 .NET Frameworkのクラス・ライブラリ・リファレンスの読み方 |
「S」のマークが付いているのはスタティックなプロパティやメソッドという意味。これらはクラスで共通に使えるので「クラス名.プロパティ名」あるいは「クラス名.メソッド名」という書き方で利用する。 |
例えば、
Dim st As String
st = "Hello" |
|
というコードを記述した場合、変数stに文字列が含まれるかどうかを真偽値で返すContainsメソッドは、
とは書けるが、当然、
とは書けない。
逆に、書式付きの文字列に変換するFormatメソッドはスタティックなメソッドなので、普通、
String.Format("{0:##.#}", 12.34) |
|
と書く。この場合、結果として返されるのは“12.3”という文字列になる。なお、
st.Format("{0:##.#}", 12.34) |
|
と書いてもプログラムは実行できるが、やはり意味が分かりにくくなるので避けた方がいい。
ちなみに、Stringクラスに限っては、クラスからオブジェクトを作成するために、Newキーワードを使って、
Dim st As New String("Hello") |
|
と書くこともできるが、プログラムを記述しやすくするために、値型の変数を宣言するような書き方で、
Dim st As String = "Hello" |
|
と記述するのが一般的だ。
■少しだけ背伸びしてオーバーロード
Monsterクラスのオブジェクトを作成すると、Newプロシージャが呼び出されて、初期値として「名なしモンスター」という名前と、20ポイントの生命力、10ポイントの魔力が設定される。しかし、いつもこの決まった値ではなく、最初から何か別の値を設定したいこともあるだろう。そのような場合には、引数のあるNewプロシージャを追加してやればよい。
Public Class Monster
Private strName As String ' モンスターの名前
Private iHp As Integer ' モンスターの生命力
Private iMp As Integer ' モンスターの魔力
'引数のないNewプロシージャ
Sub New()
strName = "名なしモンスター"
iHp = 20
iMp = 10
End Sub
'引数のあるNewプロシージャ
Sub New(ByVal strNewName As String, ByVal iNewHp As Integer, ByVal iNewMp As Integer)
strName = strNewName
iHp = iNewHp
iMp = iNewMp
End Sub
:
:
End Class |
|
Newプロシージャに引数を定義する |
名前、生命力、魔力を引数にしたNewプロシージャを追加する。プロシージャ名は同じだが、引数の数が異なるので正しく区別される。 |
引数付きのNewプロシージャを追加しておき、オブジェクトを作成するときに、
Dim m1 As New Monster("オヤジスライム", 120, 0) |
|
のように引数を指定すると、引数付きのNewプロシージャが呼び出され、名前が「オヤジスライム」、生命力が120ポイント、魔力が0ポイントのモンスターが作られる。
もちろん、引数なしで、
とすれば、引数なしのNewプロシージャが呼び出され、「名なしモンスター」などの初期値が設定される。
このように、同じプロシージャ名で、引数の個数やデータ型の異なるプロシージャをいくつも記述しておくことは「オーバーロード」と呼ばれている。が、まあ呼び名はともかく、.NET Frameworkのクラス・ライブラリを使うときに、
Dim str As New String("x"c, 4) ' "x"という文字を4つ |
|
でも
Dim str As New String("xxxx") ' "xxxx"という文字列 |
|
でも、オブジェクトが作成できるのはこういう仕組みのおかげだ。
結び − まだまだ道のりは長いけれど
クラスとオブジェクトを使いこなすためには、まだまだ多くの考え方や機能を学ぶ必要がある。だが、それはもう少し先でも構わない。実は、今回のサンプル・プログラムとして、もう1つ別に、モンスターをたくさん作ってListBoxコントロールに登録するようなものを作ったのだが、オブジェクトの破棄、継承、インターフェイスなどについて理解しておく必要があり、まともに説明すると膨大な分量になってしまうので割愛することにした。
もちろん、機会があれば割愛した話にも進みたいのだが、今回の目的はよく目にする「おまじない」の意味を一通り理解し、モヤモヤ感を解消しようということなので、このあたりにとどめておきたいと思う。取りあえず、今回の内容を理解すれば、.NET Frameworkのクラス・ライブラリ・リファレンスがぐっと読みやすくなると思う。