C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の暗黙的型変換と明示的型変換の違いを徹底解説!サンプルコードで学ぶ型変換の基本

はじめに

C#では、異なるデータ型の間で値をやり取りする際に「型変換」が必要になります。型変換には、コンパイラが自動的に行ってくれる暗黙的型変換と、プログラマが意図的に指示する明示的型変換の2種類があります。本記事では、それぞれの特徴と違いをサンプルコードとともにわかりやすく解説します。

暗黙的型変換(Implicit Type Conversion)とは

暗黙的型変換は、C#が型の安全性を保ちながら自動的に実行してくれる変換です。小さい型から大きい型への変換(例:int → long)は、データが失われる恐れがないため、特別な記述をしなくても行えます。

次のコードを見てください。int型の値をlong型の変数に代入しても、エラーにはなりません。

int val1 = 11000;
int val2 = 35600;
long sum;

sum = val1 + val2;

上記のように、2つのint型変数の合計をlong型変数に代入しても問題ありません。これは、代入のタイミングでコンパイラが自動的にint型からlong型へ暗黙的な変換を行ってくれるためです。

サンプルコード

using System;
using System.IO;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            int val1 = 34567;
            int val2 = 56743;
            long sum;

            sum = val1 + val2;

            Console.WriteLine("Sum= " + sum);

            Console.ReadLine();
        }
    }
}

実行結果:

Sum= 91310

明示的型変換(Explicit Type Conversion)とは

明示的型変換(キャスト)は、プログラマがキャスト構文などの事前に用意された機能を使って、意図的に行う変換です。大きい型から小さい型への変換(例:double → int)では、データが失われる可能性があるため、コンパイラは自動的には変換せず、明示的な指定を求めてきます。

以下は、double型の値をint型にキャストする例です。

サンプルコード

using System;

namespace Program {
    class Demo {
        static void Main(string[] args) {
            double d = 1234.89;
            int i;

            // double型をint型にキャスト
            i = (int)d;
            Console.WriteLine(i);
            Console.ReadKey();
        }
    }
}

実行結果:

1234

(int)d のように、変換先の型名を括弧で囲んで指定することで、double型の値がint型に変換されます。このとき小数点以下は切り捨てられるため、出力結果は「1234」となります。元の値1234.89から小数部分が失われるように、情報が欠落する可能性がある変換こそ、C#が明示的な記述を要求しているのです。

まとめ:暗黙的型変換と明示的型変換の違い比較表

項目暗黙的型変換明示的型変換
実行者コンパイラが自動的に実行プログラマが明示的に指定
安全性型安全(データ損失なし)データ損失の可能性あり
変換方向小さい型 → 大きい型大きい型 → 小さい型 など
記述方法そのまま代入するだけ(int)d のようにキャストを記述

暗黙的型変換は安全で手軽ですが、逆方向の変換や精度が落ちる可能性がある変換では、明示的型変換によって開発者の意図をコード上で明確にする必要があります。両者の特性を正しく理解し、状況に応じて使い分けることが、バグの少ない堅牢なC#プログラムを書くための重要なポイントです。

  1. C言語の型変換入門:暗黙的変換と明示的変換(キャスト)の違いを徹底解説

    あるデータ型を別のデータ型へ変換することを「型変換(type conversion)」と呼びます。C言語における型変換には、主に以下の2種類があります。 暗黙的な型変換(implicit conversion) 明示的な型変換(explicit conversion) 暗黙的な型変換とは 演算対象(オペランド)同士のデータ型が異なる場合、コンパイラが自動的に行う型変換です。 プログラマが特に指示しなくても、小さいデータ型から大きいデータ型への変換が自動的に実行されます。これを「型の昇格」とも呼びます。 int i,x; float f; double d; long int l;

  2. 【C/C++】const int*、const int* const、int const* の違いをわかりやすく解説

    C言語やC++では、ポインタとconst修飾子の組み合わせ方によって、複数の異なる変数宣言が存在します。「const int*」「const int* const」「int const*」など、一見よく似たこれらの宣言の違いを正確に理解することは、安全でバグの少ないコードを書くうえで非常に重要です。本記事では、これら3つの宣言の違いを、複雑な宣言を読み解く際に役立つ「時計回り/らせんルール(Clockwise/Spiral Rule)」にも触れながら、コード例とともに分かりやすく解説します。時計回り/らせんルールとは宣言の中心にある識別子から出発し、時計回りに記号をなぞっていくことで、cons