C#のtypeof()とGetType()の違いと使い方を徹底解説
C#には、型情報を取得するための方法としてtypeof()演算子とGetType()メソッドの2つがあります。どちらもTypeオブジェクトを返しますが、対象や評価のタイミングに違いがあります。本記事では、それぞれの基本的な使い方と実行例をわかりやすく解説します。
typeof()とは
typeof()は演算子であり、指定した型そのもののTypeオブジェクトを返します。引数には型名を直接指定します。
例えば、byte型に対して使用する場合は、次のように記述します。
typeof(byte)
typeof()の使用例
using System;
class Program {
static void Main() {
Console.WriteLine(typeof(int));
Console.WriteLine(typeof(byte));
}
}
実行結果
System.Int32 System.Byte
このように、C#のintは.NETのSystem.Int32、byteはSystem.Byteに対応していることが確認できます。
GetType()とは
GetType()は、すべてのオブジェクトの基底クラスであるObjectクラスで定義されているメソッドで、現在のインスタンスの実際の型を実行時に取得します。変数に入っている値がどの型なのかを動的に調べたい場合に便利です。
型を取得する基本構文は次のとおりです。
Type tp = value.GetType();
取得した型は、typeof()の結果と比較することで判定できます。
if (tp.Equals(typeof(int)))
Console.WriteLine("{0} is an integer data type.", value);
GetType()の使用例
using System;
class Program {
public static void Main() {
object[] values = { (int)100, (long)17111 };
foreach (var value in values) {
Type tp = value.GetType();
if (tp.Equals(typeof(int)))
Console.WriteLine("{0} is an integer data type.", value);
else
Console.WriteLine("'{0}' is not an int data type.", value);
}
}
}
実行結果
100 is an integer data type. '17111' is not an int data type.
この例では、object配列に格納された各値の実際の型をGetType()で取得し、それがint型かどうかを判定しています。long型の値はintではないため、else側の処理が実行されます。
typeof()とGetType()の違いまとめ
| 項目 | typeof() | GetType() |
|---|---|---|
| 種類 | 演算子 | メソッド |
| 対象 | 型名を直接指定 | インスタンス(オブジェクト) |
| 評価タイミング | コンパイル時 | 実行時 |
| 主な用途 | 特定の型との比較・判定 | 変数に入った値の実際の型の調査 |
このように、typeof()は「型そのもの」からTypeを取得するのに対し、GetType()は「インスタンス」から実行時の型を取得するという違いがあります。両者を正しく使い分けることで、リフレクションを活用した柔軟で堅牢なプログラムを書けるようになります。
-
C#の明示的な型変換(キャスト)とは?基本とサンプルコードをわかりやすく解説
C#における明示的な型変換(明示的キャスト)とは、プログラマが意図的にキャスト演算子を使って、あるデータ型から別のデータ型へ値を変換する処理のことです。暗黙的な変換では対応できない型同士(たとえば double から int への変換など)では、この明示的な変換が必要になります。明示的な型変換の特徴明示的な型変換には、以下のような特徴があります。キャスト演算子が必要:変換先の型名を括弧 ( ) で囲んで記述します。データ損失の可能性がある:大きい型から小さい型へ変換する場合、精度や情報が失われることがあります。開発者が責任を持って指定する:コンパイラが自動的に行わないため、変換の意図を明示的に
-
Javaにおける戻り値(リターンタイプ)の重要性とは?基本とサンプルコードで解説
Javaにおける戻り値(return文)とは return文は、メソッド内の処理を終了し、プログラムの制御をメソッドの呼び出し元へ返すための構文です。Javaでは、すべてのメソッドに対して戻り値の型(リターンタイプ)を宣言することが必須となっています。 戻り値の型には、int、float、doubleなどのプリミティブ型、クラスや配列などの参照型、そして値を何も返さないことを示すvoid型を指定できます。 戻り値を扱う際の重要なポイント メソッドが返すデータの型は、メソッドで宣言された戻り値の型と互換性がある必要があります。例えば、戻り値の型がbooleanのメソッドでは、整数(int)を