カテゴリ: VB.NET 更新日: 2025/12/11

VB.NETの構造体(Structure)の基本とクラスとの違いを初心者向けに解説!

VB.NETで構造体(Structure)を使う基本とクラスとの違い
VB.NETで構造体(Structure)を使う基本とクラスとの違い

先生と生徒の会話形式で理解しよう

生徒

「VB.NETでクラスはよく聞くんですが、構造体(Structure)ってなんですか?」

先生

「構造体はクラスと似ていますが、軽量でデータをまとめるのに便利な仕組みなんですよ。」

生徒

「クラスとどう違うんですか? いつ使えばいいんでしょう?」

先生

「それでは、VB.NETでの構造体の基本とクラスとの違いを、例を交えながら説明していきましょう!」

1. 構造体(Structure)とは?

1. 構造体(Structure)とは?
1. 構造体(Structure)とは?

VB.NETの構造体(Structure)とは、複数のデータをひとつにまとめることができるデータ型です。簡単に言うと「ひとつの箱にいろいろな小物をまとめて入れるようなもの」です。例えば「人の情報」をまとめる場合、名前・年齢・住所をそれぞれ変数で持つよりも、構造体にまとめたほうが分かりやすく整理できます。

クラスと似ていますが、構造体は「値型」として扱われるのが大きな特徴です。値型というのは、変数に代入した時に実体ごとコピーされるという仕組みです。これに対してクラスは「参照型」と呼ばれ、変数に代入しても中身は共有されます。

2. 構造体を定義する方法

2. 構造体を定義する方法
2. 構造体を定義する方法

構造体はStructureキーワードを使って定義します。次の例では「人」を表す構造体を作っています。


Structure Person
    Public Name As String
    Public Age As Integer
End Structure

このように定義すると、Personというデータ型を自分で作ったのと同じように扱うことができます。

3. 構造体を使う例

3. 構造体を使う例
3. 構造体を使う例

次に、先ほど定義したPerson構造体を使ってみましょう。


Structure Person
    Public Name As String
    Public Age As Integer
End Structure

Module Program
    Sub Main()
        Dim p1 As Person
        p1.Name = "太郎"
        p1.Age = 20

        Console.WriteLine("名前: " & p1.Name)
        Console.WriteLine("年齢: " & p1.Age)
    End Sub
End Module

名前: 太郎
年齢: 20

このように、構造体を使うと関連するデータをひとまとめに扱えるので、プログラムがスッキリします。

4. クラスと構造体の違い

4. クラスと構造体の違い
4. クラスと構造体の違い

ここで、VB.NETのクラス(Class)構造体(Structure)の違いを整理してみましょう。

項目 クラス 構造体
型の種類 参照型 値型
メモリの扱い ヒープ領域に保存され、参照を共有 スタック領域に保存され、コピーされる
用途 大規模なデータや複雑な機能を持つ場合 小規模なデータやシンプルな用途
継承 可能 不可

例えば「人間のように複雑なふるまいを持たせたい場合」はクラスを使い、単純に「座標XとY」などの小さなデータのまとまりを表す場合は構造体を使うと良いでしょう。

5. 構造体のコピーの仕組み

5. 構造体のコピーの仕組み
5. 構造体のコピーの仕組み

構造体は値型なので、代入するときにデータそのものがコピーされます。次の例を見てみましょう。


Structure Point
    Public X As Integer
    Public Y As Integer
End Structure

Module Program
    Sub Main()
        Dim p1 As Point
        p1.X = 10
        p1.Y = 20

        Dim p2 As Point = p1 'ここでコピーされる
        p2.X = 99

        Console.WriteLine("p1.X = " & p1.X)
        Console.WriteLine("p2.X = " & p2.X)
    End Sub
End Module

p1.X = 10
p2.X = 99

このように、p1とp2は別々のデータを持っています。クラスの場合は参照を共有するので、このような結果にはなりません。

6. 構造体を使うメリット

6. 構造体を使うメリット
6. 構造体を使うメリット

構造体を使うことで次のようなメリットがあります。

  • 小さなデータのまとまりを簡単に表現できる
  • クラスを使うほど大げさではない場面に最適
  • 値型なので予期せぬ参照共有を避けられる

特に初心者にとっては、「クラスは大きな箱、構造体は小さな箱」と覚えると分かりやすいです。

まとめ

まとめ
まとめ

VB.NETの構造体(Structure)について学びました。構造体は小さなデータをまとめて扱える値型のデータ構造で、クラスと似ていますが、軽量でコピーが容易な特徴があります。例えば、名前・年齢・住所など関連する情報をひとまとめにしたり、座標や小規模な設定データを扱う場合に非常に便利です。構造体は値型なので、代入するときにデータがコピーされ、参照の共有が発生しません。そのため、予期せぬデータ変更を防ぎ、プログラムの安定性を高めることができます。

一方、クラスは参照型で、ヒープ領域に格納されます。大規模なデータや複雑な動作を伴うオブジェクトに向いており、継承や多態性を活用できます。構造体とクラスの違いを理解することで、用途に応じて適切なデータ型を選択でき、プログラムの可読性や保守性を向上させることが可能です。

サンプルプログラムで振り返り


' 構造体を定義
Structure Person
    Public Name As String
    Public Age As Integer
End Structure

Module Program
    Sub Main()
        Dim p1 As Person
        p1.Name = "太郎"
        p1.Age = 20

        ' コピーして別の変数に代入
        Dim p2 As Person = p1
        p2.Name = "花子"
        p2.Age = 25

        Console.WriteLine("p1 名前: " & p1.Name & ", 年齢: " & p1.Age)
        Console.WriteLine("p2 名前: " & p2.Name & ", 年齢: " & p2.Age)
    End Sub
End Module

p1 名前: 太郎, 年齢: 20
p2 名前: 花子, 年齢: 25

この例では、p1とp2は別々のデータを持つため、p2を変更してもp1には影響しません。値型である構造体の特性を活かすことで、安全にデータを扱えます。

先生と生徒の振り返り会話

生徒

「先生、構造体は値型だからコピーされるんですね。クラスとは全然違いますね。」

先生

「そうです。クラスは参照型なので、代入すると同じオブジェクトを共有しますが、構造体は完全に独立したコピーになります。」

生徒

「なるほど。じゃあ、小さなデータをまとめたいときは構造体、大きくて複雑なデータや継承が必要な場合はクラスを使うんですね。」

先生

「その通りです。初心者の方は、まず構造体で小さなデータをまとめる練習をすると理解しやすくなります。そして、徐々にクラスでオブジェクト指向を活用するステップに進むと良いでしょう。」

生徒

「構造体とクラスの使い分けを覚えると、VB.NETのプログラムが整理されて、可読性も上がりますね。」

先生

「その通りです。構造体を正しく使うことで、プログラムの効率性と安全性を高めることができるので、ぜひ活用してください。」

カテゴリの一覧へ
新着記事
New1
ASP.NET
ASP.NET WebFormsのGridViewでデータ表示を完全マスター!初心者向けガイド
New2
VB.NET
VB.NETの例外処理とパフォーマンスの関係を初心者向けに完全解説
New3
ASP.NET
ASP.NET WebFormsでデータベースと連携!初心者でもできる保存と表示の基本
New4
VB.NET
VB.NETでStackTraceを利用してエラー箇所を特定する方法を完全解説!初心者向け例外処理入門
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETのEnum(列挙型)の使い方を完全解説!初心者にも分かる定義と活用方法
No.2
Java&Spring記事人気No2
VB.NET
VB.NETのIf文の使い方と条件分岐を完全ガイド!初心者でもわかる基本構文と実例
No.3
Java&Spring記事人気No3
VB.NET
VB.NETのBoolean型(True/False)の使い方と条件分岐での活用方法を徹底解説!初心者でも理解できる基本
No.4
Java&Spring記事人気No4
VB.NET
VB.NETの配列(Array)の作り方と基本操作を徹底解説!初心者でもわかる入門ガイド
No.5
Java&Spring記事人気No5
VB.NET
VB.NETプログラムの実行方法まとめ!Visual Studio・コマンドラインの使い方
No.6
Java&Spring記事人気No6
VB.NET
VB.NETの例外処理を完全ガイド!初心者でもわかるSystem.Exceptionの仕組み
No.7
Java&Spring記事人気No7
VB.NET
VB.NETのコンストラクタと初期化処理の書き方を初心者向けに解説
No.8
Java&Spring記事人気No8
VB.NET
VB.NETでの変数名の付け方とは?わかりやすくエラーの起きにくい命名規則を紹介