C#のType.GetNestedTypes()メソッドの使い方を徹底解説
C#のType.GetNestedTypes()メソッドは、現在のTypeオブジェクト内にネスト(入れ子)されている型を取得するために使用されるメソッドです。この記事では、基本的な構文から実際のコード例、実行結果までをわかりやすく解説します。
構文
Type.GetNestedTypes()メソッドには、以下の2つのオーバーロードが用意されています。
public Type[] GetNestedTypes (); public abstract Type[] GetNestedTypes (System.Reflection.BindingFlags bindingAttr);
引数なしのバージョンはパブリックなネストされた型をすべて返し、BindingFlagsを指定するバージョンでは、検索条件を細かく制御できます。
使用例1:基本的な使い方
まずは、引数を指定しない基本的な使い方を見てみましょう。以下の例では、Subjectクラス内に定義されたネストされた型を取得して表示します。
using System;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type[] type2 = type1.GetNestedTypes();
Console.WriteLine("Nested Types...");
for (int i = 0; i < type2.Length; i++)
Console.WriteLine("{0} ", type2[i]);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Nested Types... Subject+BasicSubject Subject+AdvSubject
出力を見ると、「Subject+BasicSubject」のように、外側のクラス名と「+」記号で連結された形式でネストされた型の名前が表示されていることがわかります。
使用例2:BindingFlagsを指定した場合
次に、BindingFlags.Publicを指定して、パブリックなネストされた型のみを取得する例を見てみましょう。
using System;
using System.Reflection;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type[] type2 = type1.GetNestedTypes(BindingFlags.Public);
Console.WriteLine("Nested Types...");
for (int i = 0; i < type2.Length; i++)
Console.WriteLine("{0} ", type2[i]);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}出力結果
このコードも同様に、以下の出力を生成します。
Nested Types... Subject+BasicSubject Subject+AdvSubject
まとめ
Type.GetNestedTypes()メソッドを使うことで、リフレクションを通じてクラス内に定義されたネストされた型を動的に取得できます。BindingFlagsを組み合わせることで、可視性(Public、NonPublicなど)に応じた柔軟な検索が可能になるため、プラグイン機構や動的な型解析が必要な場面で非常に役立ちます。
-
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 {