暗黙的キャストは、変数や式を明示的に型変換せずに別のデータ型に自動的に変換する方法です。
int intValue = 10;
double doubleValue = intValue; // intからdoubleへの暗黙的キャスト
Console.WriteLine($"intValue: {intValue}, doubleValue: {doubleValue}");
データ型一覧
以下の記事が参考になると思いますので、良ければどうぞ。
暗黙的なキャストとは?
暗黙的なキャストの例
例えば、次のようなコードがあるとします。
int x = 10;
double y = x;
上記のコードは、整数型intの変数 x を宣言し、その後で浮動小数点型doubleの変数 y に x の値を代入しています。
このコードで、int
型の変数 x
の値を double
型の変数 y
に代入しているけど、どうして特にキャストを書かなくていいの?
実は、int
型から double
型への変換は自動的に行われるんだ。
だから、プログラマがわざわざキャストを書く必要がないんだよ。
なるほど、つまり自動的に int
が double
に変わるから、明示的にキャストしなくても大丈夫なんだね!
その通りです!
暗黙的キャストのおかげで、コードがスッキリしますね。
この代入文では、x の値が自動的に double 型に変換されます。
この変換は暗黙的なキャストによって行われます。
さまざまな暗黙的なキャスト
暗黙的なキャストには主に以下のようなものがあります。
byte(整数型)からint(整数型)への暗黙的なキャスト
小さいデータ型 → 大きいデータ型へ変換
byte byteValue = 25;
int intValue = byteValue;
Console.WriteLine("byteValue: " + byteValue);
Console.WriteLine("intValue: " + intValue);
実行結果
byteValue: 25
intValue: 25
float (浮動小数点型)から double (浮動小数点型)への暗黙的なキャスト
小さいデータ型 → 大きいデータ型へ変換
float floatValue = 3.14f;
double doubleValue = floatValue;
Console.WriteLine("floatValue: " + floatValue);
Console.WriteLine("doubleValue: " + doubleValue);
実行結果
floatValue: 3.14
doubleValue: 3.140000104904175
注意点として、float から double へのキャストでは、double 型の精度が float 型よりも高いため、わずかな違いが表示されることがあります。これは float 型の値が double 型に変換される際の精度の違いによるものです。
列挙型(Enum) から int(整数型)への変換
列挙型(Enum) → 整数型への変換
using System;
public class Program
{
// 列挙型の定義
enum Days
{
Sunday, // 0
Monday, // 1
Tuesday, // 2
Wednesday, // 3
Thursday, // 4
Friday, // 5
Saturday // 6
}
public static void Main()
{
// 列挙型の値を変数に代入
Days today = Days.Wednesday;
// 列挙型からintへの変換(明示的なキャスト)
int dayNumber = (int)today;
// 結果を出力
Console.WriteLine("Enum value: " + today);
Console.WriteLine("Integer value: " + dayNumber);
}
}
実行結果
Enum value: Wednesday
Integer value: 3
暗黙的なキャストが使えない場面
とても便利な暗黙的なキャストですが、使用できない場面も存在します。
以下はその例です。
大きなデータ型から小さなデータ型への変換
情報の損失が発生する可能性があるため、明示的なキャストが必要です。
int intValue = 1000;
byte byteValue = intValue; // コンパイルエラー。intからbyteへの暗黙的なキャストは禁止
浮動小数点型から整数型への変換
小数点以下の情報が失われるため、明示的なキャストが必要です。
double doubleValue = 10.5;
int intValue = doubleValue; // コンパイルエラー。doubleからintへの暗黙的なキャストは禁止
異なる参照型間の変換
クラス間の暗黙的なキャストはサポートされていない。
class A { }
class B { }
A a = new A();
B b = a; // コンパイルエラー。異なる参照型間の暗黙的なキャストは禁止
暗黙的なキャストの注意点
*1 プラットフォームは、プログラムが実行されるオペレーティングシステム(Windows、Linux、macOSなど)、ハードウェアアーキテクチャ(x86、ARMなど)、および実行環境(デスクトップ、サーバー、モバイルデバイスなど)を含みます。プログラムが実行される環境が変わると、プログラムの動作や挙動が異なる場合があります。