C又はC++なんかを少しでも齧った人ならば、リテラルとか変数とかキャストの説明とか
されても全然うれしくないと思います(分かりきってることですからね)
と、いうわけで、C#での型についてもう一歩踏み込んで説明したいと思います。
C#での型は大きく分けて二つあります。
一つが値型、もう一つは参照型です。
変数、として説明されているもののうち、「string」は参照型で、それ以外は値型、に
なります。
じゃぁ、値型と参照型ってなにがちがうの?
という質問が当然出てくると思いますが、簡単に言うと、値型はオブジェクトを渡す際
(例えば、関数のパラメータとして渡す際)、データをコピーするもの、参照型はオブ
ジェクトのアドレスを渡すもの、ということになります。
このデータが、例えば1MByteもあるような強大なデータだった場合、値型ならば渡すた
びにコピーを行う為、オーバーヘッドが大きくなります。
参照型ならば、アドレスを渡せば良いので、オーバーヘッドを気にする必要はありません。
プログラムを作成する際、効率を重視するならこのオーバーへッドを念頭に入れて値型と
参照型を使い分ける必要があります。
ま、この辺はCやC++でもありましたね。
特にC++では参照渡しもできましたし。
さて、ここからが重要、というかC#特有なものになるのですが、C#では構造体は値型、ク
ラスは参照型になります。
C#での構造体はstructですが、C/C++でのstructと意味合いが異なります。
詳細をここで説明することはしませんが、一番大きな違いは、C#の構造体は「System.Val
ueType」を継承し、System.ValuteTypeは「System.Object」を継承しています。
よって、System.ValuteTypeと、System.Objectのメソッドを使用することが出来ます。
メソッドというのは、構造体やクラスの持つ関数のことです。
Systemは名前空間です。
Systemという名前空間の下に、いくつか構造体やクラスがあり、ValuteTypeとObjectはSys
temの下にあるクラスです。
ちなみに、変数の型として説明したintやbyteなども、実はSystemの下にある構造体だった
りします。
これらは単なる予約語で、たとえばSystem.Int32等という表記も出来ます。
予約語と、System下の構造体/クラス名前との対応は以下の通り。
予約語 |
System |
byte |
System.Byte |
sbyte |
System.SByte |
ushort |
System.UInt16 |
short |
System.Int16 |
uint |
System.UInt32 |
int |
System.Int32 |
ulong |
System.UInt64 |
long |
System.Int64 |
float |
System.Single |
double |
System.Double |
decimal |
System.Decimal |
char |
System.Char |
string |
System.String |
bool |
System.Boolean |
object |
System.Object |
実際に動かしてみましょう。
例えば、変数intは参照型、つまり構造体です。
構造体なので、Sytem.ValuteTypeとSystem.Objectのメソッドを使用することが出来ま
す。
Hellow Worldでやったように、新規にプロジェクトを作ってみましょう。
真ん中にlabelを設置します。
そして、Form1_Load関数を以下のようにします。
int i = 1234;
label1.Text = i.ToString();
ToStringは、System.Objectのメソッドです。
実行させると、真ん中に1234と表示されるウィンドウが表示されるはずです。
labelへ値を渡すとき、直接「label1.Text = i;」のようにすると、型が違うぞと怒ら
れます。
Label::Textはstring型です。
int型を代入することは出来ません。
なので、ToString()メソッドで、数値を文字列に変換し、格納しているわけです。
説明文を書いていてなんですが、実のところこの辺に対する知識は必須のものではあり
ません。
知らなくても簡単なプログラム、例えばコンバータ等は作ることが出来ます。
ただ、知っておくに越したことはありませんし、有る程度高度なプログラムを作るよう
になると、このあたりの知識量がものを言うようになってきます。
なので、初めのほうはint型をstring型に入れるにはToString()を使えばいいんだ、程
度で覚えていてもかまいませんが、C#でプログラムを有る程度作れるようになったら、
改めてこの説明を見てみると良いかもしれません。
最終更新:2007年09月06日 12:55