連載
プロフェッショナルVB.NETプログラミング
第3回 構造体の宣言とその効能
(株)ピーデー
川俣 晶
2002/04/16
|
|
構造体宣言
VB 6のTypeステートメントは、VB.NETには存在しない。その代わりに、より強力な構造体という機能が用意されている。例えば、以下のようなVB 6のソースがあったとする。
1: Private Type Person
2: Name As String
3: Age As Integer
4: End Type
5:
6: Private Sub setPerson(p As Person, n As String, a As Integer)
7: p.Name = n
8: p.Age = a
9: End Sub
10:
11: Private Sub Form_Load()
12: Dim p As Person
13: setPerson p, "太郎", 17
14: Debug.Print p.Name
15: Debug.Print p.Age
16: End Sub |
|
Typeステートメントを使用したVB 6のサンプル・プログラム6 |
これを実行すると以下のようになる。
このソースをそのままVB.NETで実行することはできない。VB.NETの構造体の機能を活用して書き換えると以下のようになる。
1: Public Class Form1
2: Inherits System.Windows.Forms.Form
3:
4: #Region " Windows フォーム デザイナで生成されたコード "
5:
6: Private Structure Person
7: Public Name As String
8: Public Age As Integer
9: Public Sub setPerson(ByVal n As String, ByVal a As Integer)
10: Name = n
11: Age = a
12: End Sub
13: End Structure
14:
15: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
16: Dim p As Person
17: p.setPerson("太郎", 17)
18: Trace.WriteLine(p.Name)
19: Trace.WriteLine(p.Age)
20: End Sub
21: End Class |
|
Typeステートメントを構造体で書き換えたVB.NETのサンプル・プログラム7 |
これを実行すると以下のようになる。
見ての通り、いろいろな点で違っている。まず最も重要な相違点は、VB 6ではTypeキーワードを用いているのに対して、VB.NETではStructureキーワードを用いている点である。Typeステートメントは、単なるユーザー定義型の定義手段でしかなかったが、構造体は、クラスとほぼ同等の機能を持つ。つまり、構造体の中にメンバ変数としてデータを保存することもできれば、メソッドなどのコードを組み込むこともできる。上記のサンプル・ソースでは、setPersonというメソッドを、構造体の中に組み込み可能であることを示している。VB 6サンプルのsetPersonは先頭にPrivateキーワードが付いているが、VB.NETサンプルのsetPersonにはPublicキーワードが付いている。この差は、メソッドの位置が移動したことによる結果である。VB 6サンプルでは、setPersonを呼び出す側と、setPerson自身が同じフォームに属するのでPrivateで呼び出し可能である。しかし、VB.NETサンプルでは、setPersonを呼び出す側はフォームに属するが、setPerson自身はPerson構造体に属するので、Privateでは呼び出すことができない。このほか、メンバ変数の宣言にPublicキーワードが付加されている点にも注意が必要である。構造体では、PublicやPrivateのキーワードを付けることが必須となっている。
Insider.NET 記事ランキング
本日
月間