ジェネリックメソッドを呼び出す場合は MethodInfo から MakeGenericMethod
を利用して、再度 MethodInfo を取得する必要がある
public class Sample { public void Exec<T>() where T : class { Debug.Log(typeof(T)); } }
例えば上記クラスの Exec
メソッドを呼び出したい場合は
// methodInfo を取得 var methodInfo = typeof(Sample).GetMethod(nameof(sample.Exec)); // Generic Method の methodInfo を取得 var genericMethod = methodInfo.MakeGenericMethod(typeof(MonoBehaviour));
とする必要がある
最終的にメソッド呼び出しまでする場合はこのコードになる
var sample = new Sample(); var methodInfo = sample.GetType().GetMethod(nameof(Sample.Exec)); var genericMethod = methodInfo.MakeGenericMethod(typeof(MonoBehaviour)); genericMethod.Invoke(sample, new object[0]);
これを実行すると
UnityEngine.MonoBehaviour
と表示され正しく実行できていることが確認できる