a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
69 lines
853 B
C#
69 lines
853 B
C#
using System;
|
|
|
|
public abstract class A<T>
|
|
{
|
|
public abstract G Foo<G> () where G : T;
|
|
|
|
public virtual G Foo2<G> () where G : T
|
|
{
|
|
return default (G);
|
|
}
|
|
}
|
|
|
|
public class B : A<int?>
|
|
{
|
|
public override G Foo<G> ()
|
|
{
|
|
return new G ();
|
|
}
|
|
|
|
public override G Foo2<G> ()
|
|
{
|
|
return base.Foo2<G> ();
|
|
}
|
|
}
|
|
|
|
abstract class A2<T>
|
|
{
|
|
public abstract void Foo<U> () where U : struct, T;
|
|
}
|
|
|
|
class B2 : A2<System.ValueType>
|
|
{
|
|
public override void Foo<Y> ()
|
|
{
|
|
}
|
|
}
|
|
|
|
abstract class A3<T>
|
|
{
|
|
public abstract void Foo<U> () where U : class, T;
|
|
}
|
|
|
|
class B3 : A3<System.Object>
|
|
{
|
|
public override void Foo<Y> ()
|
|
{
|
|
}
|
|
}
|
|
|
|
class Program
|
|
{
|
|
public static int Main ()
|
|
{
|
|
var b = new B ();
|
|
if (b.Foo<int?> () == null)
|
|
return 0;
|
|
|
|
b.Foo2<int?> ();
|
|
|
|
var b2 = new B2 ();
|
|
b2.Foo<byte> ();
|
|
|
|
var b3 = new B3 ();
|
|
b3.Foo<string> ();
|
|
|
|
return 1;
|
|
}
|
|
}
|