連載

プロフェッショナルVB.NETプログラミング

第3回 構造体の宣言とその効能

(株)ピーデー
川俣 晶
2002/04/16

Page1 Page2 Page3

構造体宣言

 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

 これを実行すると以下のようになる。

太郎
17
サンプル・プログラム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

 これを実行すると以下のようになる。

太郎
17
サンプル・プログラム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のキーワードを付けることが必須となっている。


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第3回 構造体の宣言とその効能
    1.行番号使用時のコロン(:)記号 
  2.構造体宣言
    3.構造体の効能
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間