public static int Main(string[] args)
    {
        //Comments are what is printed out.
        var d1 = new D1();
        var d2 = new D2();

        d1.Foo <C1>();  //31
        Console.WriteLine();
        d1.Foo <C2>();  //31
        Console.WriteLine();
        //d2.Foo<C1>(); //Error constraint mismatch
        d2.Foo <C2>();  //421
        Console.WriteLine();
        B_base b_d2 = d2;

        b_d2.Foo <C1>();          //1
        Console.WriteLine();
        b_d2.Foo <C2>();          //1
        Console.WriteLine();
        return(0);
    }