連載
プロフェッショナルVB.NETプログラミング
第9回 オブジェクト関連(前編)
(株)ピーデー
川俣 晶
2002/06/15
|
|
プロパティ構文の大変更
VB 6からVB.NETで変化したものは多いが、プロパティの構文は、特に大きな変更があったポイントの1つといえるだろう。事前の知識がなければ、どう書き換えればよいのか、予測もつかないはずだ。それぐらい劇的に変化している。では、最初に、VB 6でプロパティを記述した例を以下に示そう。まず、2つのプロパティを持つクラスのコードからお見せしよう。
1: Private str As String
2: Private obj As Object
3:
4: Public Property Get test1() As String
5: test1 = "Hello World!"
6: End Property
7:
8: Public Property Let test1(s As String)
9: str = s
10: End Property
11:
12: Public Property Get test2() As Object
13: Set test2 = obj
14: End Property
15:
16: Public Property Set test2(o As Object)
17: Set obj = o
18: End Property
|
|
2つのプロパティを持つクラスを定義したVB 6のサンプル・プログラム16 |
これを呼び出すコードとして以下のようなコードを記述してみた。
1: Private Sub Form_Load()
2: Dim obj As New Class1
3:
4: obj.test1 = "Hello!"
5: Debug.Print obj.test1
6:
7: Set obj.test2 = Form1
8: Debug.Print obj.test2.Caption
9: End Sub
|
|
サンプル・プログラム16を呼び出すVB 6のサンプル・プログラム17 |
これを実行すると以下のようになる。
では、これとほぼ同等の機能をVB.NETで記述してみた例を以下に示す。まずは、プロパティを持つクラスのソースから。
1: Public Class Class1
2: Private str As String
3: Private obj As Object
4:
5: Public Property test1() As String
6: Get
7: Return str
8: End Get
9: Set(ByVal Value As String)
10: str = Value
11: End Set
12: End Property
13:
14: Public Property test2() As Object
15: Get
16: Return obj
17: End Get
18: Set(ByVal Value As Object)
19: obj = Value
20: End Set
21: End Property
22: End Class
|
|
サンプル・プログラム16とほぼ同等の機能を持つVB.NETのサンプル・プログラム18 |
見ての通り激変である。まず、Property Set、Property Let、Property Getの3つの構文は姿を消した。その代わり、5行目や14行目のようなProperty宣言を用いて、プロパティの宣言を行う。そして、Property宣言の内部に、“Get〜End Get”と“Set〜End Set”を書き込んで、その中に実際にSetやGetの処理を書き込む。ここで注意すべきことは、VB 6では、Set、Let、Getと3つの種類の操作があったのに、VB.NETには、SetとGetしか存在しないことである。これは、VB.NETではLetとSetの区別がなくなったことにより、プロパティでも、LetとSetの区別が不要になったことによる変化である。
実際にプロパティの動作を記述する方法も変化している。まず、7行目や16行目のReturnは、プロパティの値を設定する機能を持っている。Returnを使うのは、メソッドの戻り値を指定するためのVB.NETの新しい構文と共通のものである。これについては、本連載でいずれ取り上げる。なお、従来どおり、プロパティ名への代入で行うこともできる。
これを呼び出すコードは以下のようになる。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim obj As New Class1()
3:
4: obj.test1 = "Hello!"
5: Trace.WriteLine(obj.test1)
6:
7: obj.test2 = sender
8: Trace.WriteLine(obj.test2.Text)
9: End Sub
|
|
サンプル・プログラム18を呼び出すVB.NETのサンプル・プログラム19 |
ほとんど同じだが、Setキーワードが不要になり、SetとLetの区別が不要になったことが、このソースからも読みとれるだろう。なお、7行目だけ別のコードに書き変わっているが、VB 6のForm1はフォームのインスタンスの名前であるのに対して、VB.NETではForm1はクラス名であることにより、Form1を代入することはできない。このイベントが発生したフォームのインスタンスへの参照は、Loadイベントの引数のsenderに含まれているので、これを使えば等価の結果となる。さらにに、8行目のTextプロパティは、VB 6のCaptionプロパティの名前が変わったものである。
これを実行すると、以下のようになる。
結果は同じだが、構文は大きく変わったので、注意しよう。
次回予告
次回は継承などの機能を取り上げたいと考えている。
Insider.NET 記事ランキング
本日
月間