C#の「is」キーワードとは?型チェックの使い方をわかりやすく解説
C#における 「is」キーワード は、あるオブジェクトが特定の型にキャスト(変換)できるかどうかを判定するために使用されます。演算の結果は bool 型(true / false)として返されます。
継承関係にあるクラス同士では、派生クラスのオブジェクトは基底クラスの型として扱えるため true を返しますが、互換性のない型への変換は false となります。
サンプルコード
using System;
namespace DemoApplication{
class Program{
static void Main(){
Employee emp = new PermanentEmployee{
ID = 1,
Name = "Martin"
};
// 派生クラスは基底クラスの型に変換できるため true を返す
if (emp is Employee){
Console.WriteLine(emp.Name + " is Employee");
}
else{
Console.WriteLine(emp.Name + " is not Employee");
}
// 実際のオブジェクトが PermanentEmployee 型なので true を返す
if (emp is PermanentEmployee){
Console.WriteLine(emp.Name + " is PermanentEmployee");
}
else{
Console.WriteLine(emp.Name + " is not PermanentEmployee");
}
// PermanentEmployee オブジェクトは ContractEmployee に
// 変換できないため false を返す
if (emp is ContractEmployee){
Console.WriteLine(emp.Name + " is ContractEmployee");
}
else{
Console.WriteLine(emp.Name + " is not ContractEmployee");
}
}
}
class Employee{
public int ID { get; set; }
public string Name { get; set; }
}
class PermanentEmployee : Employee{
public int AnnualSalary { get; set; }
}
class ContractEmployee : Employee{
public int HourlySalary { get; set; }
}
}コードのポイント
- emp is Employee:PermanentEmployee は Employee を継承しているため、true が返ります。
- emp is PermanentEmployee:実際に生成されたオブジェクトの型が PermanentEmployee なので、true が返ります。
- emp is ContractEmployee:PermanentEmployee と ContractEmployee は兄弟関係にあり、相互に変換できないため、false が返ります。
補足:C# 7.0 以降のパターンマッチング
C# 7.0 以降では、「is」キーワードを使ったパターンマッチングが利用できます。型チェックとキャストを同時に行えるため、より簡潔なコードが書けます。
if (emp is PermanentEmployee pe){
Console.WriteLine($"{pe.Name} の年間給与: {pe.AnnualSalary}");
}このように書くことで、型判定が true の場合にのみ、キャスト済みの変数 pe がスコープ内で使えるようになります。従来のように明示的なキャストや別途の null チェックが不要になり、安全で読みやすいコードを実現できます。
-
C#のsizeof演算子とは?データ型のサイズを取得する方法
C#のsizeof()演算子は、指定したデータ型が占めるサイズ(バイト数)を返します。組み込みの値型に対して使用でき、メモリ管理やパフォーマンスの最適化を行う際に役立ちます。例えば、int型のサイズを調べたい場合は次のように記述します。sizeof(int);double型の場合は以下のとおりです。sizeof(double);サンプルコードそれでは、さまざまなデータ型のサイズを実際に確認できる完全な例を見てみましょう。using System; namespace Demo { class Program { static void Main(string[]
-
Java 9におけるアンダースコア(_)キーワードとは?識別子として使えなくなった理由とエラー例を解説
Java 9でのアンダースコアの扱いの変更点以前のバージョンのJavaでは、アンダースコア(「_」)は識別子として利用でき、変数名を作成する際にも自由に使用することができました。しかし、Java 9以降では、アンダースコア文字は予約語(キーワード)として扱われるようになり、識別子や変数名として使用することはできません。そのため、単一のアンダースコア文字を識別子として記述した場合、プログラムはコンパイルに失敗し、コンパイル時エラーが発生します。なお、実はJava 8の時点でアンダースコアを識別子として使うと警告が出るようになっており、Java 9で完全に禁止されたという経緯があります。これは、将