基本

[VB.NET] 構造体とは?使い方やクラスとの違いも解説

今回は、VB.NETの構造体とは?使い方やクラスとの違いも解説についてご紹介します。

構造体とは?

VB.NETの構造体は、値型として扱われるデータ構造です。

宣言時や代入時に実際の値がコピーされるため、メモリ上はスタックに配置されます。

このため生成や破棄の処理が高速で、比較的小規模なデータをまとめるのに適しています。

ただし継承はサポートされず、クラスのような複雑なオブジェクト指向設計には向きません。

一方でインターフェイスの実装は可能なので、軽量な設計と柔軟性を両立できます。

クラスとの違い

クラス参照型として扱われ、インスタンスはヒープ上に生成されます。

複数の変数が同じインスタンスを共有し、代入時は参照のコピーが行われます。

構造体は値がコピーされるのに対して、クラスは参照を共有する点が大きな違いです。

またクラスには継承ポリモーフィズムがあり、複雑な機能を持たせることができます。

構造体は基本的に継承不可ですが、小規模かつ短期間で扱うデータ構造としてはパフォーマンスに優れています。

構造体の使い方と具体例

構造体はStructureキーワードで定義し、フィールドやメソッドを持たせることができます。

ただしパラメータ無しのコンストラクタは自動生成されるため、任意に定義することはできません。

以下にPoint構造体の定義と、その使用例を示します。

実行結果

原点からの距離: 5

上記のように、構造体を使うと値そのものを扱うため、別の変数に代入した場合には全フィールドの値がコピーされます。

この仕組みにより、不用意にデータが共有されることを避けられますが、逆にコピーコストに注意が必要です。

大きなサイズの構造体を多用するとパフォーマンスを損なう可能性があります。

注意点

ボックス化(Boxing)に注意が必要です。

構造体をObject型にキャストすると、内部的にヒープ領域へデータがコピーされます。

これにより意図しないメモリ使用量の増加や処理のオーバーヘッドが発生する場合があります。

また構造体を変更可能な(ミュータブルな)設計にすると、コピーされるタイミングを見誤って不具合を生むケースがあります。

設計上はなるべく不変(イミュータブル)にするか、変更がある場合はその動作を明確に意識することが大切です。

まとめ

構造体は軽量かつ短命なデータに適した値型で、クラスは継承可能な参照型です。

用途に合わせて使い分けることで、メモリ効率と可読性を両立できます。

コピーの仕組みやボックス化の挙動などを正しく理解すると、より効率的な設計が可能です。