libro
www.tuyano.com
初心者のためのC#プログラミング入門

値・変数・演算 (4/5)

作成:2013-07-20 10:27
更新:2013-07-20 10:27

■型変換(キャスト)について

何度もいいますが、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()」と記述します。これは、その値の「メソッド」というものを呼び出すものです。メソッドについてはオブジェクト指向の説明のところで説明する予定です。

またテキストを整数に変換するには、IntDoubleといったものの「Parse」メソッドを呼び出します。これは引数に指定された値を整数や実数に変換するものです。これでテキストを指定の値に変換できます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

※関連コンテンツ

「初心者のためのC#プログラミング入門」に戻る