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
)