5 using System.Reflection;
10 public static int Main()
12 return new GenericDerived<Param>().FindMethod();
22 class GenericDerived<T> :
23 Abstract<GenericDerived<T>>
25 public int FindMethod()
27 return FindGenericMethod<T>();
32 abstract class Abstract<TDerived>
33 where TDerived : Abstract<TDerived>
35 protected virtual int FindGenericMethod<T>()
37 var method = typeof(TDerived)
38 .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic)
39 .FirstOrDefault(x => x.Name == "FindGenericMethod" && x.IsGenericMethod);
41 Console.WriteLine("TDerived = {0}", typeof(TDerived));
42 Console.WriteLine("method = {0}", method);
43 Console.WriteLine("method.DeclaringType = {0}", method.DeclaringType);
44 Console.WriteLine("method.IsGenericMethod = {0}", method.IsGenericMethod);
45 Console.WriteLine("method.IsGenericMethodDefinition = {0}", method.IsGenericMethodDefinition);
47 if (!method.IsGenericMethod)
49 if (!method.IsGenericMethodDefinition)