ナナエフ

同人ゲームサークル『7-FIELD』制作ブログ  -ゲーム制作やイベント参加などの活動情報 + 雑記-

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[C#]自作クラスのメンバに構造体は入れるのは自粛

tetsuwoです。 【 twitter

クラスと構造体 (C# プログラミング ガイド) 】 - Visual Studio MSDN

  一般に、クラスは、より複雑な動作、つまりクラス オブジェクトの作成後に変更されることを意図されたデータをモデル化するために使用されます。
  
  構造体は、主として構造体の作成後に変更されることを意図しないデータを含む、小規模なデータ構造に最適です。



これらを踏まえ、使い分けて作成していましたが

都合上、クラスのメンバに構造体を入れる必要が出てきてしまいました。
 
 
クラスと構造体の特徴

冒頭のリンクにて、以下のように説明されてます。

  クラスと構造体は、どちらも基本的にはデータと動作のセットを 1 つの論理単位としてカプセル化するデータ構造です。

  データと動作はクラスまたは構造体のメンバーです。メソッド、プロパティ、イベントなどが含まれます。



このように、クラスと構造体は似たような作りになっておりますが、大きな違いとして

クラスは「参照型」。変数が持っているのは参照先で、参照先の値は別の場所に格納されてます。

それに対し、構造体は「値型」。変数に直接、値が格納されます。



参照型のメンバとして値型が入っていると、値のコピーはできない?

例えば、自作クラスにint型変数がメンバとして定義されており

そのコピーをする場合、単純に「コピー先変数 = 自作クラス.コピー元変数」とすると値がコピーされ、連動しません。

クラスのインスタンス自体をコピーすると、参照型として複製されます。


しかし、構造体のインスタンスを「コピー先構造体 = 自作クラス.構造体」と代入すると、参照型となり連動してしまいます。

更に、それを防ぐためにデフォルトで用意されている「Clone」「CopyTo」メソッドを使っても参照型となってしまいました。


クラスのメンバに構造体は入れない

結果として、代入先の新規変数には参照型として複製されるのか、はたまた値型として複製されるのか

納得する形で理解できませんでした。



以前にも「クラスのメンバに、別クラスのインスタンスを入れるとコピー出来ない」と言う記事を書きましたが

構造体のメンバに構造体を入れてもおかしな事になるのかもしれません。


原因が分かるまでは、クラス・構造体のメンバにそれぞれのインスタンスは定義しないでおこうと思います。

もっと色々なパターンで代入していけば分かることでしょうか・・・?



クラスと構造体には他にも色々と特徴はありますので、設計時にしっかり理解されるのが良いと思います。

<参考リンク>

  【 値型と参照型 】 - ++C++
  
  【 クラス (C# プログラミング ガイド) 】 - Visual Studio MSDN
  
  【 構造体 (C# プログラミング ガイド) 】 - Visual Studio MSDN
  
  【 オブジェクト (C# プログラミング ガイド) 】 - Visual Studio MSDN

宣伝

2031年 秋、北守新都市。生活にAR技術が根付いたこの街で

"傷"を抱えた7人がそれぞれに見出す"真実"とは。


ad4_introduction01.png

当サークル第2弾作品「薄鈍アドベント」DL販売中です。

体験版も公開しておりますので、目に止まりましたらお試しあれ。
 
スポンサーサイト
  1. 2013/09/09(月) 22:00:00|
  2. 制作
  3. | トラックバック:0

トラックバック

トラックバック URL
http://7fblog.blog.fc2.com/tb.php/267-5f611697
この記事にトラックバックする(FC2ブログユーザー)

カウンター

プロフィール

akinasi, tetsuwo

Author:akinasi, tetsuwo
FC2ブログへようこそ!

検索フォーム

カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

告知 (63)
制作 (88)
ソフト紹介 (19)
素材紹介 (10)
言外 (7)
雑記 (361)
ナナエ (29)

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。