using System; interface IContravariant { } interface ICovariant { } class D { public static bool Contra (IContravariant e1, IContravariant e2) { Console.WriteLine (typeof (T)); return typeof (T) == typeof (string); } public static bool Covariant (ICovariant e1, ICovariant e2) { Console.WriteLine (typeof (T)); return typeof (T) == typeof (object); } public static bool CovContCont (ICovariant e1, IContravariant e2, IContravariant e3) { Console.WriteLine (typeof (T)); return typeof (T) == typeof (string); } public static bool ContCovContCov (IContravariant e1, ICovariant e2, IContravariant e3, ICovariant e4) { Console.WriteLine (typeof (T)); return typeof (T) == typeof (string); } public static bool CovCovCont (ICovariant e1, ICovariant e2, IContravariant e3) { Console.WriteLine (typeof (T)); return typeof (T) == typeof (string); } public static int Main () { ICovariant a = null; ICovariant b = null; if (!Covariant (a, b)) return 1; IContravariant a_1 = null; IContravariant b_1 = null; if (!Contra (a_1, b_1)) return 2; ICovariant a_2 = null; IContravariant b_2 = null; IContravariant c_2 = null; if (!CovContCont (a_2, b_2, c_2)) return 3; IContravariant a_3 = null; ICovariant b_3 = null; IContravariant c_3 = null; ICovariant d_3 = null; if (!ContCovContCov (a_3, b_3, c_3, d_3)) return 4; Console.WriteLine ("ok"); return 0; } }