Typeクラスでは次のようなメソッドによって型で定義されているメンバの情報を取得することができます。 これらのメソッドを使うことによって、型情報からメソッドやフィールドなどのメンバを参照することができ、そこから更にメソッドの呼び出しやフィールドの値の取得など(詳細は§.MemberInfo派生クラスを使ったメンバの呼び出しで後述)を行うことができます。
メソッド | 動作 |
---|---|
GetMember
GetMembers |
指定された名前のメンバ、あるいはすべてのメンバを取得する。 メンバ情報はMemberInfoクラスで返される。 |
GetConstructor
GetConstructors |
指定された引数リストのコンストラクタ、あるいはすべてのメンバを取得する。 ConstructorInfoクラスが返される。 |
GetEvent
GetEvents |
指定された名前のイベント、あるいはすべてのイベントを取得する。 EventInfoクラスが返される。 |
GetField
GetFields |
指定された名前のフィールド、あるいはすべてのフィールドを取得する。 FieldInfoクラスが返される。 |
GetMethod
GetMethods |
指定された名前・引数リストのメソッド、あるいはすべてのメソッドを取得する。 MethodInfoクラスが返される。 |
GetProperty
GetProperties |
指定された名前のプロパティ、あるいはすべてのプロパティを取得する。 PropertyInfoクラスが返される。 |
戻り値として返されるMethodInfoなどのクラスはすべてMemberInfoクラスから派生したクラスとなっています。 MemberTypeプロパティを参照するとメンバの種類をMemberTypes列挙体で取得することができます。
クラスの型情報からすべてのメンバを取得する
using System;
using System.Reflection;
class C {
public void M() {} // メソッド
public int P { get; set; } // プロパティ
public string F = null; // フィールド
}
class Sample {
static void Main()
{
var t = typeof(C);
// クラスCのすべてのメンバを取得して表示する
foreach (var m in t.GetMembers()) {
Console.WriteLine("{0}\t{1}", m.MemberType, m);
}
Console.WriteLine();
// 名前がFのフィールドを取得する
var f = t.GetField("F");
Console.WriteLine(f);
}
}
実行結果
Method Int32 get_P() Method Void set_P(Int32) Method Void M() Method Boolean Equals(System.Object) Method Int32 GetHashCode() Method System.Type GetType() Method System.String ToString() Constructor Void .ctor() Property Int32 P Field System.String F System.String F
このようにして取得したMemberInfoを使うことにより、メソッドの呼び出しやフィールドの取得・設定などの操作を行うことができます。