ここではC#の型変換、キャストについて学びます。
キャスト (cast)
キャストとは型変換のことです。ある型で定義された変数や値を別の型に変更することを言います。
今の知識範囲だと全ての変換方法は必要ないので、最も基礎的な暗黙的キャストと明示的キャストを理解しましょう。
ここではC#の型について学びます。 型(type) の概念 変数や定数、評価式の結果など、C#では存在する値の全てに型があります。さらにC#は厳密に型指定された言語となり、異なる型の扱いに非常に厳しいです。 数値型で用意した変数に文字列を代入する処理を認める言語もありますが、C#ではこのような処理は認められません。故に型を理解することはC#では必須の知識になります。自分がどんな型を扱ってるか常に把握しましょう。 C#において型を間違えようものならボコボコにされます。 ...
暗黙的キャスト
これが最もシンプルな方法です。まずはサンプルコードを見てみましょう。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
int x = 100;
long l = x; // int型を暗黙的にlong型に変換する
Console.WriteLine(x);
Console.WriteLine(l);
}
}
}
このように普通に代入するだけです。ただし、これが許されるには条件があります。
その条件とは型として変換が可能かどうかで、それはC#のルールで決まってます。
と言いましたが、これでは分かりづらいですよね。
もっと簡単に説明するなら、常識の範囲で変換するが答えです。
常識の範囲とは?
先程の例を使うなら何故int型はlong型に変換できたのでしょうか。それは型のサイズがlong型のほうが大きいからです。
つまりlong型はint型の全ての値を内包してます。故にint型をlong型に変換しても絶対に問題は起きないのです。
なるほど。じゃあ、変換不可能な型はどうなりますか?
その場合はビルドエラーで実行できないよ。だからC#は型に厳しいって言われるんだ。
明示的キャスト
もう1つの方法はこちらです。これはキャストする値を明示的に指定します。
記述は簡単で変換したい変数などに (型名) を付けます。
short s = (short)x;
こちらがサンプルコードです。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
int x = 100;
short s = (short)x; // int型を明示的にshort型に変換する
Console.WriteLine(x);
Console.WriteLine(s);
}
}
}
これは強制的、しかも意図的に型変換してます。それ故にビルドエラーとして扱われません。
では、この時に値の範囲を超えたり、変換不可能な型同士でキャストしたらどうなるのでしょうか。
その場合は変換時に値が欠けたり、実行時エラーでプログラムが落ちる可能性があります。
そして先程も言った通り、これはビルドエラーでは無いので記述ミスとして検出されません。
有名なのは実数を整数型に変換するパターンでしょう。このサンプルコードを実行してください。
namespace Sample
{
internal class Program
{
static void Main(string[] args)
{
double x = 123.456789;
int i = (int)x; // double型を明示的にint型に変換する
Console.WriteLine(x);
Console.WriteLine(i);
}
}
}
このように実数が所有していた小数以下の情報が消滅しました。
危険そうですね。
普通に危険だよ。少なくとも無理解で使うのはNGだね。ただ、これを使わないと詰む場面があるから覚えるしかないんだ。
あとがき
実は他に安全な変換方法があるのですが、これはclassを学ばないと効果を発揮しません。
明示的キャストは極力使わないほうがいいのですが、現実的にはどこかで使うことになります。
C#は本当に型に厳しいのでキャストも厳格に処理されます。という事で型の理解を深めておきましょう。
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。 クラス(class) クラスとは特定の機能を1つにまとめたものです。正直、説明が難しいのでコードを使って話します。最初に以下の記述方法とサンプルコードを見てください。これは車という機能をクラス化したコードです。 // クラス public class Car { ...
ここではC#のis演算子とas演算子について学びます。この話はキャストが深く関係するため、以下を理解してる必要があります。 危険なキャスト C#でキャストする最も簡単な方法は暗黙的キャストまたは明示的キャストです。そして暗黙的キャストは問題ないとしても、明示的キャストには危険が伴います。 特に型変換ができない場合は例外が発生するため、結果としてプログラムが死にます。以下は一般的なダウンキャストのサンプルコードです。これは明示的キャストのためビルドエラーにはなりま...
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント