何度もいいますが、C#では、値には
型(タイプ)があります。さまざまな型の値を扱う場合、注意しなければならないのが「異なる値どうしを演算する場合」の扱いです。例えば整数と実数を計算したり、テキストと数字をつなげたり、といったことですね。
こうした場合、C#では「
型変換(キャスト)」と呼ばれる操作をします。つまり、ある型の値を別の型に変換して計算を行うのです。ただし、注意したいのは、「勝手にやってくれる変換と、自分で処理を書かないといけない変換がある」という点でしょう。
●暗示的キャスト「プログラマが指示しなくてもC#がかってにやってくれる」という変換は、
暗示的変換(キャスト)と呼ばれます。例えば、こんな感じです。
double n = 100 * 1.5;
100という整数と、
1.5という実数を計算していますね。こうした「異なる型の値の計算」では、より広い範囲(細かい範囲と考えてもよい)で値を扱える型に変換されます。例えばこの例だと、整数と実数では実数のほうがより細かに値を扱えるため、
100を実数に変換して計算をします。
もし、逆に両方を整数にして計算をしてしまうと、
1.5は小数点以下を切り捨てて
1となり、正しい結果が得られません。より広い範囲を扱えるほうに揃えれば、こうした値の劣化を防ぐことができます。
また、テキストと他の値を
+記号でつなげる場合、それらは自動的にテキストに変換されます。テキストは、
+記号の演算で「テキストどうしをつなげる」という働きしか使えないので、式にテキストが使われた時点で自動的に「これはテキストどうしをつなげるものだ」と判断してくれるのです。
●明示的キャスト逆に、「より扱える範囲の狭い方への変換」は、自動では行われません。こうした処理は、プログラマが自分で変換のための処理を記述しなければいけません。例を上げましょう。
int n = 100 * 1.5;
これは、暗示的キャストにより、
100という整数を実数に変換して計算を行いますね。ところが、代入する変数は
int型(整数)です。このため、「暗示的にキャストできないよ」とエラーになってしまいます。こんな、どーでもよさそうなものでもエラーになってしまうんです。プログラミングというのは本当に杓子定規ですね。
そこで、「じゃあ計算結果を整数に変換してよ」ということを書いてやります。するとこのようになります。
int n = (int)(100 * 1.5);
これで、問題なく動くようになります。ここでは、計算式全体を
()でまとめ、その手前に
(int)というものをつけています。これがキャストの書き方です。整理すると、
( 形名 ) 値
このように、値の前に
()で型名を指定することで、その値を指定の型にキャストできます。ただし、より扱える範囲の狭い方に変換をするわけですから、場合によっては値の劣化が起こる可能性もあります。
※stringとの変換についてテキスト(
string)と、それ以外の値のキャストは、実はこの方式ではできません。これらは、C#に用意されている機能を利用して変換します。
・数値などをstringにするstring 変数 = 《値》.ToString();
・stringを数値にするint 変数 = Int.Parse(《値》);
int 変数 = Double.Parse(《値》);
値をテキストに変換するには、その値の後に「
.ToString()」と記述します。これは、その値の「
メソッド」というものを呼び出すものです。メソッドについてはオブジェクト指向の説明のところで説明する予定です。
またテキストを整数に変換するには、
Intや
Doubleといったものの「
Parse」メソッドを呼び出します。これは引数に指定された値を整数や実数に変換するものです。これでテキストを指定の値に変換できます。