.net column

.NET開発者のためのブログメディア

VB.NETの構造体の使い方は?クラスとの違いやサンプルも解説!

2020年01月10日

「VB.NETの構造体の使い方がよくわからない……」
「具体的な使い方だけでなく、クラスとの違いも知りたいな……」

と思っていませんか?

VB.NETの構造体は、クラス同様覚えておくととても便利です。ただ、使い方が分かりにくく、初めて使う人は苦戦する人が多いです。

そこで今回は、VB.NETの構造体の使い方やサンプルコードについて解説します。クラスとの違いについても解説しているので、ぜひ参考にしてみてくださいね!

PG
VB.NETの構造体って難しそう……。
SE
難しく感じるかもしれませんが、一度使えばすぐに覚えられますよ!

※この記事は、Visual Basicの16.0で動作確認しました。

VB.NETの構造体の使い方は?サンプルコードも紹介!

まず、VB.NETの構造体の使い方について解説します。使い方1つとっても色々あるので、以下3つに分けて解説しますね。

・構造体の宣言・初期化方法
・構造体の値の取得・利用方法
・構造体のコピー方法

1つずつ詳しく解説しますね。

構造体の宣言・初期化方法

まず、「構造体の宣言・初期化方法」について学んでいきましょう。

構造体を使う上での基礎となるので、しっかり使い方を覚えていきましょう。

使い方は、以下のとおりです。
※下記は、構造体内の変数が2つある場合の書き方です。

「Private Structure 構造体名 ~ End Structure」までの間で、構造体を定義しています。

構造体はただ変数を用意するだけでなく、値をセットするメソッドを用意するのが一般的です。そのため、「set構造体名」の名前で、変数に値をセットするメソッドも用意しています。

ただこれだけだと、使い方のイメージが湧かない方もいるのではないでしょうか。具体的な使い方を解説するために、サンプルコードを用意しました。

「Private Structure Users ~ End Structure」の中で、構造体名「Users」の定義をしています。Usersの中では、UserID、Name、Ageの3つの変数と、値をセットするためのメソッド「setUsers」を用意しています。

実際に構造体を利用するときは、Mainメソッドで「Dim sUsers As Users」のように宣言しています。宣言後、初期化するために「sUsers.setUsers(“A0001”, “テストユーザ1”, 24)」を書いています。

「sUsers.setUsers(“A0001”, “テストユーザ1”, 24)」では、UserIDに「A0001」、Nameに「テストユーザ」、Ageに「24」を入れています。

構造体の値の取得・利用方法

次に、宣言した構造体の値を取得して利用する方法を覚えていきましょう。

先ほど宣言した構造体を使って、以下のように値を利用できます。

使い方:

先ほど解説したサンプルに追記したサンプルコードは、以下のとおりです。

実行結果:

初期化時にセットした値が、「sUsers.UserID」「sUsers.Name」「sUsers.Age」でそれぞれ取得できていますよね。

このように、セットした値を取得し、簡単に利用できます。

構造体のコピー方法

構造体は宣言・初期化 + 値の取得・利用方法がわかれば利用できます。ただ、構造体を使った変数を複数用意したいケースはよくあります。

そのため、構造体のコピー方法も覚えておきましょう。

コピー方法は、以下のとおりです。

使い方:

こちらも、先ほどのサンプルコードを用意しました。

実行結果:

「sUsers1.setUsers(“A0001”, “テストユーザ1”, 24)」で、構造体の変数「sUsers1」に初期値をセットしています。

その後、「sUsers2 = sUsers1」で構造体をコピーすることで、「sUsers1」「sUsers2」の結果が同じになっています。このように、簡単に値をコピーできます。

VB.NETの構造体とクラスの違いは?

SE
構造体はクラスと似ているけど、違いはあるのかな…。
PM
サンプルコードのような使い方だけであれば、あまり違いはありません。ただ、細かいところでいくつか違いがあります!

VB.NET以外の言語を使ったことがある場合、クラスとの違いがよくわからない人も多いのではないでしょうか。

構造体とクラスの違いは、以下のとおりです。

■構造体
・値型
・小規模のデータであれば、処理が早い
・継承、イベントなどができない

■クラス
・参照型
・大規模なデータの場合は、処理が早い
・継承、イベントなどができる

大きな違いは、構造体が「値型」で、クラスが「参照型」である点です。

1つのみ宣言して扱う場合は違いがありませんが、複数宣言して使う場合、結果が変わります。たとえば、コピーした構造体の変数を変更した場合は、以下のようになります。

構造体のサンプル:

実行結果:

この例では、コピー後の構造体「sUsers2」のUserIDを変更しています。そのため、「sUsers1」のUserIDは初期化の値から変わっていません。

ただ、クラスの場合は、以下のようになってしまいます。

実行結果:

クラス名が「cUsers2」の「UserID」のみ変えていますが、クラス名「cUsers1」の「UserID」の値も変わっています。このように、コピーして使用した際の動きが違うのです。

また、構造体の場合は、設定する変数の数が多ければ多いほど処理に時間がかかります。そのため処理速度が遅いと感じたら、クラスへの変更を考えてみると良いでしょう。

VB.NETで構造体以外に複数データを扱う方法はないの?

構造体は複数の型の変数をまとめて利用できるため、とても便利です。

ただ、「慣れるまで扱いにくい……」と感じる人は多いです。そのため、他の方法も覚えておくのがおすすめです。

具体的に言うと、以下2つは覚えておくと良いでしょう。

・配列
・Enum

配列は、変数宣言するだけで、複数の値を管理・利用できる方法です。ただし、型の指定が1つのみなので、複数の型で一括管理したい場合は構造体・クラスを使いましょう。

Enumは構造体のように、別途定義が必要です。また、数値しか扱うことができません。

その代わり、連続した値を簡単に設定ができるため、用途によってはとても便利です。

配列とEnumの使い方については、以下でそれぞれ解説しています。ぜひ参考にしてみてくださいね。

>>> 【VB.NET入門】配列の使い方全まとめ!基礎だけでなく応用も

>>> VB.NETのEnumの使い方は?基礎だけでなく応用テクも解説!

まとめ

今回は、VB.NETの構造体の使い方・サンプルコードについて解説しました。

構造体は複数の型の変数を管理・利用できるため、とても便利です。まずは簡単な構造体を作ってみて、慣れてきたらクラスや配列、Enumなどを学んでいくと良いでしょう。

簡単なコードからでいいので、ぜひコードを書いてみてくださいね!


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)