Type.GetMethods()について
- GetMethodsにより指定したクラス内にある関数をMethodInfo[]型として取得できる。
- 更に、BindingFlags型の引数を指定することで習得する関数の種類を設定できる。
BindingFlagsについて
- GetMethodsの引数を指定することで習得する関数の種類を設定できる。
BindingFlags.Public | public |
BindingFlags.NonPublic | private, protectedなど |
BindingFlags.Static | static |
BindingFlags.Instance | staticではない関数 |
BindingFlags.DeclaredOnly | そのクラス内で指定した関数のみ(継承したのは含まない) |
MethodInfoについて
- GetMethodsで取得した関数を保存する型
- MethodInfo.Nameで関数名を取得できる
- MethodInfo.GetParameters()で関数の引数についてParameterInfo[]型で取得できる
- MethodInfo.ReturnTypeで戻り値の型を取得できる
ParameterInfoについて
- ParameterInfo.ParameterTypeでパラメータの型を取得できる
使用例
次のクラスでは、BindingFlagsの設定により
- すべてのアクセシビリティ
- static、非staticどちらも
- クラス内で宣言した
関数を取得するようにしている。
using System; using System.Reflection; class SampleBase { protected void OverrideMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } } class MethodsClass : SampleBase { //static static void PrivateStaticVoidMethod(int a) { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } static int PrivateStaticIntMethod(int b, string c) { Console.WriteLine(MethodBase.GetCurrentMethod().Name); return 0; } public static void ProtectedStaticVoidMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } public static void PublicStaticVoidMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } //Instance void PrivateInstanceVoidMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } public string PublicInstanceStringMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); return null; } public void PublicInstanceVoidMethod() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); } } public class Sample { public static void Main() { BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly; MethodsClass methodsClass = new MethodsClass(); Type type = methodsClass.GetType(); MethodInfo[] methods = type.GetMethods(flags); //取得したメソッドの情報 foreach (var m in methods) { Console.WriteLine($"メソッド名:{m.Name}"); ParameterInfo[] ps = m.GetParameters(); if (ps.Length == 0) Console.Write("引数なし"); else for (int i = 0; i < ps.Length; i++) Console.Write($"引数{i}:{ps[i].ParameterType}, "); Console.WriteLine($"\n返り値 = {m.ReturnType}\n"); } } }
実行結果
メソッド名:PrivateStaticVoidMethod 引数0:System.Int32, 返り値 = System.Void メソッド名:PrivateStaticIntMethod 引数0:System.Int32, 引数1:System.String, 返り値 = System.Int32 メソッド名:ProtectedStaticVoidMethod 引数なし 返り値 = System.Void メソッド名:PublicStaticVoidMethod 引数なし 返り値 = System.Void メソッド名:PrivateInstanceVoidMethod 引数なし 返り値 = System.Void メソッド名:PublicInstanceStringMethod 引数なし 返り値 = System.String メソッド名:PublicInstanceVoidMethod 引数なし 返り値 = System.Void