C#のType.GetNestedType()メソッドとは?基本構文と実装例を解説
C#のType.GetNestedType()メソッドは、リフレクションを利用して、現在のTypeオブジェクトに含まれる特定の入れ子になった型(ネスト型)を取得するために使用されます。入れ子クラスの名前を引数として渡すことで、該当する型情報をTypeオブジェクトとして受け取ることができます。
構文
Type.GetNestedType()メソッドには、以下の2つのオーバーロードが用意されています。
public Type GetNestedType (string name); public abstract Type GetNestedType (string name, System.Reflection.BindingFlags bindingAttr);
主なパラメータ
- name:取得対象となる入れ子型の名前(文字列)
- bindingAttr:検索条件を指定する
System.Reflection.BindingFlags
戻り値と例外
- 指定した名前の入れ子型が存在すれば、その
Typeオブジェクトを返します(見つからない場合はnull)。 - 引数
nameにnullを渡した場合は、ArgumentNullExceptionがスローされます。
使用例1:入れ子型を取得する基本的なコード
次の例では、Subjectクラスの中に入れ子になっているAdvSubjectクラスを、名前を指定して取得しています。
using System;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type type2 = type1.GetNestedType("AdvSubject");
Console.Write("NestedType = "+ type2);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}出力結果
NestedType = Subject+AdvSubject
出力を見ると、入れ子型は「外部クラス名+内部クラス名」の形式(Subject+AdvSubject)で表されることが分かります。
使用例2:nullを指定した場合の挙動
続いて、引数にnullを渡した場合の動作を確認してみましょう。
using System;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type type2 = type1.GetNestedType(null);
Console.Write("NestedType = "+ type2);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}出力結果
System.ArgumentNullException
このように、nullを渡すと例外がスローされるため、実際のコードではtry-catchブロックによる例外処理や、事前のnullチェックを行うことが推奨されます。
まとめ
Type.GetNestedType()メソッドを使えば、リフレクションによって特定の入れ子型へ動的にアクセスできるようになります。プラグイン機構や動的な型解決が必要な場面で活用するとよいでしょう。ただし、引数がnullの場合に例外が発生する点には注意が必要です。
-
C#のType.Equals()メソッドとは?使い方とサンプルコードを解説
C#のType.Equals()メソッドは、現在のTypeインスタンスが表す基盤となるシステム型が、指定されたObjectまたはTypeの基盤となるシステム型と同一であるかどうかを判定します。リフレクション処理などで型同士を比較したい場合に役立つメソッドです。 構文 public virtual bool Equals (Type o); public override bool Equals (object o); パラメータ o:現在のTypeの基盤となるシステム型と比較する対象となるオブジェクトまたは型を指定します。 戻り値 両方の基盤システム型が同じ場合は true、異なる場合は fa
-
C#のタイプセーフ(型安全性)とは?仕組みと具体例をわかりやすく解説
C#におけるタイプセーフ(型安全性)とは、あるオブジェクトが別のオブジェクトのメモリ領域に不正に侵入することを防ぐための重要な言語機能です。この仕組みによって、異なる型同士の不適切な操作がコンパイル段階で検出され、実行時エラーや予期しないバグを未然に防ぐことができます。ここでは、具体的なコード例を使ってタイプセーフの概念を詳しく見ていきましょう。コード例:2つのクラスを定義するまず、以下のように2つのクラス「One」と「Two」を定義します。public class One { public int Prop { get; set; } } public class Two {