C#で現在のTypeから指定されたメンバーを取得する方法
C#では、リフレクション(System.Reflection)を利用することで、現在のTypeから指定した名前のメンバーを動的に取得できます。メンバー情報を取得するには Type.GetMember() メソッドを使用し、フィールド単体を取得したい場合は Type.GetField() メソッドが便利です。
以下に具体的なサンプルコードを示します。
例1:GetMemberとGetFieldを使った基本的な取得方法
using System;
using System.Reflection;
public class Demo {
public static void Main() {
Type type = typeof(Subject);
try {
FieldInfo fieldInfo = type.GetField("SubName");
MemberInfo[] info = type.GetMember("SubName");
Console.Write("Members = ");
for (int i = 0; i < info.Length; i++)
Console.WriteLine(" {0}", info[i]);
Console.WriteLine("FieldInfo = {0}", fieldInfo);
}
catch (ArgumentNullException e) {
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject {
public string SubName = "Science";
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Members = System.String SubName FieldInfo = System.String SubName
例2:BindingFlagsを指定してメンバーを検索する
次の例では、BindingFlags を指定して、検索対象のメンバーを「パブリックかつインスタンスメンバー」に限定しています。これにより、意図しないメンバーまで取得されるのを防ぐことができます。
using System;
using System.Reflection;
public class Demo {
public static void Main() {
Type type = typeof(Subject);
try {
FieldInfo fieldInfo = type.GetField("SubName");
MemberInfo[] info = type.GetMember("SubName", BindingFlags.Public | BindingFlags.Instance);
Console.Write("Members = ");
for (int i = 0; i < info.Length; i++)
Console.WriteLine(" {0}", info[i]);
Console.WriteLine("FieldInfo = {0}", fieldInfo);
}
catch (ArgumentNullException e) {
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject {
public string SubName = "Science";
}出力結果
実行すると、以下の出力が得られます。
Members = System.String SubName FieldInfo = System.String SubName
ポイント解説
- GetMember(string):指定した名前に一致するメンバーを MemberInfo[] 配列として返します。同名のメンバーが複数存在する場合もすべて取得できます。
- GetField(string):指定した名前のフィールドを FieldInfo オブジェクトとして返します。フィールドが見つからない場合は null を返します。
- BindingFlags:
Public、Instance、Static、NonPublicなどを組み合わせることで、検索範囲を細かく制御できます。 - 例外処理:引数に null を渡すと ArgumentNullException がスローされるため、try-catch ブロックでのエラーハンドリングが推奨されます。
このように、リフレクションを活用すれば、実行時に型の構造を調べたり、メンバーへ動的にアクセスしたりすることが可能になります。プラグイン機構やシリアライザの実装など、柔軟なプログラミングに役立ちます。
-
C#で現在のインスタンスの型を取得する方法(GetTypeメソッド)
C#でオブジェクトの現在のインスタンスの型(実行時の型)を取得するには、GetType()メソッドを使用します。このメソッドはすべての型の基底クラスであるSystem.Objectに定義されており、呼び出し元インスタンスの正確な型をSystem.Typeオブジェクトとして返します。 GetType()メソッドの基本 GetType()はインスタンスに対して呼び出すことで、その実行時の型情報を取得できます。戻り値であるTypeオブジェクトをそのまま文字列連結して出力すると、「System.String」や「System.Int32」のような完全修飾型名が表示されます。 例1:string型のイン
-
C#で列挙型(Enum)の型を取得する方法
C#で列挙型(Enum)の型情報を取得するには、GetType()メソッドを使用します。この記事では、実際のコード例を通じて、列挙型の型名や基になる型(Underlying Type)の取得方法をわかりやすく解説します。 列挙型の準備 まず、複数の列挙型の値を格納した配列を用意します。ここでは、.NET標準ライブラリに含まれる ConsoleColor と DayOfWeek の2つの列挙型を使用します。 Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday}; GetType()メソッドで型を取得する 列挙値の型を取得するには、各値