using System;
public class C {
public C() {
Console.WriteLine("test");
}
public void Init(int a) {}
public abstract class A {
public abstract void foo<T>() where T : C, new();
public class B : A {
public override void foo<T>() {
var a = new T();
a.Init(2);
public class Program
{
public static void Main()
new B().foo<C>();