C#のType.GetMember()メソッドとは?使い方をサンプルコードで解説
C#のType.GetMember()メソッドは、リフレクション(System.Reflection)を利用して、現在のTypeから指定した名前のメンバー(フィールド、プロパティ、メソッドなど)を取得するために使用されます。取得結果はMemberInfo型の配列として返されます。
構文
Type.GetMember()メソッドには、以下の2つのオーバーロードが用意されています。
public System.Reflection.MemberInfo[] GetMember (string name); public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.BindingFlags bindingAttr);
第1引数には取得したいメンバーの名前を指定します。第2のオーバーロードでは、BindingFlagsを組み合わせることで、検索対象をパブリックメンバーやインスタンスメンバーなどに絞り込むことができます。
使用例1:基本的な使い方
まずは、基本的なGetMember(string)メソッドを使った例を見てみましょう。
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
このように、「SubName」という名前のメンバーがMemberInfo配列として正しく取得できていることが確認できます。比較のため、GetField()メソッドで取得したFieldInfoも併せて表示しています。
使用例2:BindingFlagsを指定した場合
続いて、GetMember(String, 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
ここでは「BindingFlags.Public | BindingFlags.Instance」を指定しているため、パブリックかつインスタンスレベルのメンバーのみが検索対象となります。該当するメンバーが存在しない場合は空の配列が返される点にも注意してください。
まとめ
- Type.GetMember()は、指定した名前のメンバー情報をMemberInfo[]として取得するメソッドである。
- name引数にnullを渡すとArgumentNullExceptionがスローされるため、必要に応じて例外処理を行う。
- BindingFlagsを指定することで、可視性(パブリック/非パブリック)や種別(静的/インスタンス)などの検索条件を細かく制御できる。
-
C#のType.GetArrayRank()メソッドの使い方を徹底解説
C#におけるType.GetArrayRank()メソッドは、配列の次元数(ランク)を取得するためのメソッドです。多次元配列が何次元であるかをプログラム上で確認したい場合に便利な機能です。構文public virtual int GetArrayRank ();このメソッドは、対象の型が配列である場合にその次元数をint型で返します。戻り値の「ランク」とは、配列の角括弧内のカンマの数+1、つまり配列のインデックスの数を表します。使用例1:3次元配列のランクを取得するまずは、3次元のint型配列に対してType.GetArrayRank()メソッドを使用する基本的な例を見てみましょう。using
-
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