ティアのホームページ☆ミ:ID 272:タイトル 謎は全て解けた! oC
no prev page 1/1ページ(1件) no next page
To Close..謎は全て解けた! 2009年02月20日14時38分
C#での、先日のあれについて、ようやく書いてある部分を見つけました。

下手に他言語を利用している関係で、全く読んでいなかったC#の基本的なドキュメントの中にその説明がありました。

VS2005のドキュメントで言うと

「データ型 (C# プログラミング ガイド)」
に記載されてあり、


・値を格納する 値型 (C# リファレンス)
・実際のデータへの参照を格納する 参照型 (C# リファレンス)

の二種類あることが明記されています。

で、=を使うと山椒が入るのが、「参照型」と言うわけですね。

それで、その参照型は主に

class

他にも「interface」とか「delegate」とかも有りますが、
そもそもインターフェイスはそもそもオブジェクトへの参照の定義ですし、
delegateは関数への参照の定義ですし、まぁはじめから参照ですね

特殊な部類に
「object」「string」が有りますが、stringが参照型というのはC++のときからそうですし、「object」はclassルートですから、まぁあえてオブジェクトにする「ボックス化」と言うところで特殊用途みたいです。

まぁ「classが参照型」と覚えるのが良いでしょう。


値型というのは、まぁintとかそのあたり
それ以外のは「struct」「enum」ですね。

値をいくらでも宣言できる物として「class」と「struct」を同一視する人がいますが、実際には、かなり違う物です。

構造体は、データのひとまとめであって、まとめただけ

classはメソッドを作らなければ構造体と大差ない状態になりますが、データとそれを扱う関数群となります。


あと、構造体は値型なので、=で代入先に複製が作成されるのですが、class等を含む場合、簡易コピーされてしまうので、クラスは参照型代入されます。

構造体に含まれるクラスを変更すると、元の構造体のクラスも変更されてしまうので要注意です。

クラスを含む場合は、構造体ではなくクラスにしてしまい、cloneメソッドを作成しておくのが良いかもしれません。
ICloneable インターフェイスを定義しておくことで、クラスが複製できることを明確に宣言できますし、こっちの方が良いでしょう☆
ちなみに、cloneメソッドの中では必要なデータを全部複製させる機能をだらだら書き込む必要が有ります。
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=272
 
no prev page 1/1ページ(1件) no next page