42 lines
507 B
C#
42 lines
507 B
C#
|
interface IA : IB
|
||
|
{
|
||
|
}
|
||
|
|
||
|
interface IB
|
||
|
{
|
||
|
}
|
||
|
|
||
|
class A<T> where T : IA
|
||
|
{
|
||
|
}
|
||
|
|
||
|
class C
|
||
|
{
|
||
|
public virtual void Foo<T> (A<T> t) where T : IA
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class D : C
|
||
|
{
|
||
|
public override void Foo<T> (A<T> t)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public static int Main ()
|
||
|
{
|
||
|
new D ();
|
||
|
|
||
|
var m = typeof (D).GetMethod ("Foo");
|
||
|
var ga = m.GetGenericArguments() [0];
|
||
|
|
||
|
var tpConstraints = ga.GetGenericParameterConstraints();
|
||
|
if (tpConstraints.Length != 1)
|
||
|
return 1;
|
||
|
|
||
|
if (tpConstraints [0] != typeof (IA))
|
||
|
return 2;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|