tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 構造体型の変数について
投稿日: 2007/09/09(Sun) 16:43
投稿者
プログラミングを独学趣味で始めて1ヶ月目の初心者です。
VB2005以外の知識はありません。パソコンについても詳しくありません。
本をよんでいてよく理解できない点がありましたので詳しい方教えてください。
クラスと構造体のことについてです。

Class Person
    Dim FirstName As string
    Dim LastName As string

            Function CompName() As String
        Retrun FirstName & LastName
              End Function
End Class

Structure PersonStruct
    Dim FirstName As string
    Dim LastName As string

            Function CompName() As String
        Retrun FirstName & LastName
              End Function
End Structure

という二つのクラスと構造体が比較のためにあります。
「VBでは構造体もクラスと同じようにメソッドを持ち、その違いは値型と参照型である」とありました。
クラスの場合は
    Dim pClsObj  As  New Person
とすることでPersonクラス型の変数pClsObjを「スタック」に作成。
そして変数pClsObjには「ヒープ」に新しく作成されたインスタンスを「参照」するためのデータが格納される。
次に
    Dim pClsObj2 As Person
と新しくインスタンスを「ヒープ」上に作成せずに、2個目のクラス型変数を宣言した場合には、pClsObjとpClsObj2は同じインスタンスを参照することになる。
よって値を変えたりすると互いに影響がある。(これがポインタということでしょうか・・)
"さらに、ヒープ上にあるインスタンスには「スタティック」にあるCompNameメソッドとの関連付けがなされるようなデータも付加されている"
ということなんだとおもいます(ちがっていたら指摘してください)

構造体での使われ方が納得いかないのです。
"構造体は「値型」である。値型の変数は「参照」を格納するのではなく「値」そのものを保持する」
のようなことが書いてありました。
構造体型の変数を利用する場合も
    Dim pStrucObj  As  (New) PersonStruct
のように構造体PersonStrcut型の変数を宣言することでこの構造体のメンバ変数を利用するということだと思います。
「New」というキーワードはつけてもつけなくても同じであり「冗長」であるとありました。
そこで判らなくなりました。
クラスであればNewを宣言すれば「ヒープ上にインスタンス」が作成されて、そのインスタンスには関連するメソッドなどとの関連付けのデータも付加される。
ということだと思います。
しかし「構造体型の変数pStrucObjは値型なので「参照ポインタ」ではなく値そのものが格納される」ということならば・・・構造体PersonStruct型の変数であるpStrucObj

にはいったい何が格納されているのですか?構造体の値とは何でしょうか・・。
推測ですがもし仮に構造体変数のpStrucObjに、この構造体のメンバ変数である「FirstName」や「LastName」の値そのものが格納されているのであれば、
この構造体のメンバ変数と関連するメソッドGompName()との関連付けはどうなっているのでしょうか・・・。
クラスならヒープ上にインスタンスとメソッドとの関連付けをするようなデータが付加されているように、スタックにある構造体型の変数にもそういう関連付けのデータが付加されるのでしょうか・・
非常に長くなりあいまいな点が多すぎるのでわかりにくいかもしれないですが、詳しい方がいたら「意味を汲み取って」いただいて説明をお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。