キャスト(cast)を理解しよう!

[C#] キャスト(cast)を理解しよう!

※ 当サイトは広告を含みます。

ここではC#の型変換、キャストについて学びます。

キャスト (cast)

キャストとは型変換のことです。ある型で定義された変数や値を別の型に変更することを言います。
今の知識範囲だと全ての変換方法は必要ないので、最も基礎的な暗黙的キャスト明示的キャストを理解しましょう。

暗黙的キャスト

これが最もシンプルな方法です。まずはサンプルコードを見てみましょう。


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#に関する学習コンテンツ

この記事は参考になりましたか?

👆このブログを支援する

関連記事

コメント

この記事へのコメントはありません。