C#プログラムのキャストについて
今回のC#プログラミング学習は、キャストについて学習していきます。
キャストとは、ディズニーランドで働くスタッフではなく、型の違う変数同士で値をやり取りするときに使う手法です。
このキャストというテクニックはいろいろな場面で使われるので、必ず使えるようにしておきましょう。
プログラムのダウンロード
まずは今回学習していくためのプログラムをダウンロードしましょう。
ここをクリックして「Sample.zip」ファイルをダウンロードしてください。
ZIP形式になっているので、ダウンロードしたら、マウスの右クリックで「すべて解凍」を選びます。
すると、Sampleプロジェクトが展開されます。
プログラムファイルを開く
Sampleプロジェクトの中に「Sample.sln」ファイルがあるので、このファイルを開くとVisualStudioのVisualC#が立ち上がります。
ソリューションエクスプローラから「Program.cs」を開くと、以下のようなプログラムが表示されます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sample { class Program { static void Main(string[] args) { double dNumber = 3.14; int iNumber; iNumber = (int)dNumber; Console.Write("double型の変数dNumberの値は {0}", dNumber); Console.ReadLine(); Console.Write("int型の変数iNumberの値は {0}", iNumber); Console.ReadLine(); } } }
プログラムのビルド
F7キーを押すとプログラムのビルドが行われ、実行ファイルが作成されます。
プログラムの実行
F5キーを押すとプログラムが実行されます。
まずは「double型の変数dNumberの値は 3.14」と表示されるのでEnterキーを押します。
次に「int型の変数iNumberの値は 3」と表示されます。
Enterキーを押すとプログラムが終了します。
プログラム解説
それでは今回学習するC#プログラムを見てみましょう。
プログラムの流れ
まずはdouble型とint型の変数を宣言するんですが、double型の変数にのみ値を入れておきます。
次に、キャストを使ってint型の変数にdouble型の値を代入します。
最後に両方の変数の中身を表示して終了です。
キャストとは
キャストとは、型の違う変数同士で値を代入するときに用いられる手法です。
以前変数のところで、「変数とは箱ですよ」と説明しました。
一言で箱と言っても、ダンボール箱だったり、引き出しだったりコップだったりいろいろありますよね。
我々が入れるモノによって入れ物を変えるように、変数も入れる値によってその型をかえます。
今まで出てきたものとしては、整数を扱うときはint型、小数を扱うときはdouble型を使うという感じですね。
で、この変数の型というのはようするに何が違うのかというと、一度に扱えるメモリの大きさが違うんです。
なので、基本的には型の違う変数に値を代入するときは、キャストを使って値の大きさを調整してやる必要があるんです。
イメージ的には、あなたが狭い部屋から広い部屋へ移動するときみたいな感じです。
部屋の大きさは変数の型つまりメモリの大きさで、あなたは値です。
例えば、あなたは一人でさっきまで6畳の部屋にいたんですが、用事があるので今度は18畳の部屋へ移動しようとしたとき、このときのそれぞれの部屋に対するあなたの空間占有率を考えてみます。
6畳の部屋にあなたが一人でいるときの空間占有率と、18畳にあなたが一人でいるときの空間占有率を比較したとき、18畳にいるときのあなたの方が小さくなっていることが分かりますよね。
あなたそのものは全く変化していないのに、入れ物を変えただけであなたは大きくなったり小さくなったりするわけです。
こうなると普通に困るので、プログラミングの世界ではキャストという手法を使って、あなたがどの大きさの部屋に行っても空間占有率は変わらないようにしているわけです。
イメージ的には、あなたが18畳の部屋に入る前に、空間占有率を6畳と同じにするために、あなたをあと2人増やして3人にしてから18畳の部屋に入れる感じでしょうか(笑)。
キャストの使い方
サンプルプログラムでキャストを使っている部分は以下になります。
iNumber = (int)dNumber;
int型の変数「iNumber」にdouble型の変数「dNumber」の値を代入しているんですが、それぞれの型が違うので、値を渡す側の変数の前に値を受ける側の型を指定しています。
今回であれば「(int)」というのがそうですね。
キャストのエラー
本当にキャストは必要なんでしょうか?
ということで、「(int)」を削除して、「iNumber = dNumber;」にしてからビルドしてみます。
すると…。
'double' を 'int' に暗黙的に変換できません。
明示的な変換が存在します。
(cast が不足していないかどうかを確認してください)
やっぱりビルドできませんでした。
こんな感じでエラーが出て、キャストが不足していることを教えてくれます。
今後もキャストはちょくちょく出てくるので、使えるようにしておきましょう。