71 lines
829 B
C#
71 lines
829 B
C#
|
namespace A
|
||
|
{
|
||
|
public interface IExtensible<T>
|
||
|
{
|
||
|
void AddAll<U> (U u)
|
||
|
where U : T;
|
||
|
}
|
||
|
|
||
|
public class ArrayList<T> : IExtensible<T>
|
||
|
{
|
||
|
void IExtensible<T>.AddAll<U> (U u)
|
||
|
{
|
||
|
InsertAll (u);
|
||
|
}
|
||
|
|
||
|
void InsertAll (T t)
|
||
|
{ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
namespace B
|
||
|
{
|
||
|
public interface IExtensible<S,T>
|
||
|
{
|
||
|
void AddAll<U> (U t)
|
||
|
where U : S;
|
||
|
}
|
||
|
|
||
|
public class ArrayList<X,Y> : IExtensible<Y,X>
|
||
|
{
|
||
|
public void AddAll<Z> (Z z)
|
||
|
where Z : Y
|
||
|
{
|
||
|
InsertAll (z);
|
||
|
}
|
||
|
|
||
|
void InsertAll (Y y)
|
||
|
{ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
namespace C
|
||
|
{
|
||
|
public interface IExtensible<S>
|
||
|
{
|
||
|
void AddAll<T> (T t)
|
||
|
where T : S;
|
||
|
}
|
||
|
|
||
|
public class Foo<U>
|
||
|
{ }
|
||
|
|
||
|
public class ArrayList<X> : IExtensible<Foo<X>>
|
||
|
{
|
||
|
public void AddAll<Y> (Y y)
|
||
|
where Y : Foo<X>
|
||
|
{
|
||
|
InsertAll (y);
|
||
|
}
|
||
|
|
||
|
void InsertAll (Foo<X> foo)
|
||
|
{ }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class X
|
||
|
{
|
||
|
public static void Main ()
|
||
|
{ }
|
||
|
}
|