プロが教えるわが家の防犯対策術!

VB.NETなのですが、Structureというものがあることを知りました。
複数のデータをまとめて扱うようなものだと思うのですが、
具体的な使い方やどんな場合に便利なのかを教えて頂きたいです。
よろしくお願いします。

A 回答 (2件)

例としてふさわしいかはわかりませんが



社員情報を扱う場合、
Name(i)
tel(i)
・・・
の様に項目を別々に変数として持つよりも
たとえば Syain という structure を作成して
その要素として、Name, tel ・・・を作成します。
使用する時は
Syain(i).Name
Syain(i).tel
のように書きます。
同じ structure 同士であれば、
代入は Syain(1) = Syain(2)
の様に要素をまとめて代入ができます。
決まったデータの組み合わせを繰り返し使用する場合に記述が簡単になります。

さらに、VB.NET 2005 からは 演算子のオーバーライドが
使えますので、structure 同士の演算を定義すれば、
複雑な演算が簡単に記述できる様になります。
たとえば 少しマニアックですが、
数学で使用するベクトルの structure を作成して
要素を x, y, z などとして、演算の定義をすれば、普通に書けば成分ごとに計算の記述をしなければいけないところが
VectorC = VectorA + VectorB
なんて、簡単に書くことができたりします。
    • good
    • 3

>Structure


StructureでWEB照会すると、質問者が聞いているような事があまり出ない。Structureは一般的な用途で沢山使われるから。
「構造体」で照会すれば、(132万件も?)沢山でてくる。
このコーナーに質問するまでも無いように思います。
あとVB.NETを加えて照会すると良い。
ーー
コンピュター内のメモリのデータとして
(1)単一項目。その個々の寄せ集まり(1変数とその結果としての集合)
まとめて考え出すと
(2)配列
(3)構造体
(4)構造体の配列
(5)構造体をメンバにする構造体(メンバは後述)
それに

ーー
配列では同じ型のデータしかまとめて扱う事はできません。(ただ
ポインタを使わせる言語だとこの意味も怪しい?)
異なる型のデータをまとめて扱いたい場合がある。まとめた個々のデータをメンバという。
例えば社員データで氏名、年齢、生年月日、住所などです。
まとめて記述するだけなら、40年も前の言語コボルの時代から、レコード定義として、異なる型のデータを扱ってきました。MSのBasicではそういう考えが遅れていたようですが、他社のBASICではレコード定義ができました。他の旧い言語PascalやAdaのレコード型も構造体に相当する(ウイキより)。VBではまたVisual Basicのユーザー定義型がその前身でしょうか。このデータ型の構造体や類似概念は、常識的で、色々な言語に取り入れられて、旧い歴史のあるものです。
ウイキの「C・C++などでサポートされている。オブジェクト指向言語では、より純粋なオブジェクト指向を目指して削除されることも多い。構造体がない言語では、クラスで代用される。逆にオブジェクト指向言語でないCなどでオブジェクト指向プログラミングを模倣するために構造体を使うこともある。標準ライブラリのFILE型がその典型的な例である。」は似ている概念だが、厳密には違うものがあるということ。
別方向から「クラス」という概念が絡んできているということがあります。
ーー
VBにおける構造体
VB6まではTypeキーワードで構造体を宣言していましたが、VB.NETではStructureキーワードで構造体を宣言します。構造体はクラスに似ていますが、クラスと違い整数や実数などと同じ値型(クラスは参照型)です。つまり、New演算子でインスタンス化せずに使用 します。
(WEBより引用)
ーー
最も重要な相違点は、VB 6ではTypeキーワードを用いているのに対して、VB.NETではStructureキーワードを用いている点である。Typeステートメントは、単なるユーザー定義型の定義手段でしかなかったが、構造体は、クラスとほぼ同等の機能を持つ。つまり、構造体の中にメンバ変数としてデータを保存することもできれば、メソッドなどのコードを組み込むこともできる。上記のサンプル・ソースでは、setPersonというメソッドを、構造体の中に組み込み可能であることを示している。(WEB照会より引用)
データ項目だけでなくメソッドまでも組み入れるまでに拡張されてきている。
ーー
そして、構造体で話題にされることは
(1)構造体の宣言方法
(2)構造体の初期化(プログラム実行開始前時に希望の値にセット)
(3)メンバの参照
構造体変数名. メンバ名」のようにピリオド(.)を用いて指定する。
(4)構造体の一括代入
(5)構造体同士の演算
(4)(5)は、これが便利な場合がある。
(6)構造体の入れ子
(7)関数に構造体を渡す、受け取る
(8)リスト構造体
ーー
構造体という考え方に関して、言語の特徴・進化を考えるとき
次ぎの点を縦糸・横糸にして考えることになると思う。
単から複へ
非クラスからクラス化
他の技法を使っての相乗効果(#1ご回答で言及のあるオーバーライドも例)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!