Exemple #1
0
        public static void ContravariantGeneric()
        {
            IContravariantGeneric <MiddleClass> genericMiddle = new ContravariantGeneric <MiddleClass>();

            genericMiddle.Method(new MiddleClass());

            IContravariantGeneric <LastClass> genericMiddle1 = new ContravariantGeneric <MiddleClass>();

            genericMiddle1.Method(new LastClass());
            IContravariantGeneric <LastClass> genericMiddle2 = new ContravariantGeneric <BaseClass>();

            genericMiddle2.Method(new LastClass());

            IContravariantGeneric <MiddleClass> genericMiddle3 = new ContravariantGeneric <BaseClass>();

            genericMiddle3.Method(new MiddleClass());

            IContravariantGeneric <BaseClass> genericMiddle4 = new ContravariantGeneric <BaseClass>();

            genericMiddle4.Method(new BaseClass());

            // This will produce compile-time error:
            // Cannot implicitly convert type 'IContravariantGeneric<MiddleClass>' to 'IContravariantGeneric<BaseClass>'.
            // An explicit conversion exists (are you missing a cast?)
            //// IContravariantGeneric<BaseClass> genericBase = genericMiddle;

            // This is OK here:
            IContravariantGeneric <LastClass> genericLast = genericMiddle;

            genericLast.Method(new LastClass());
        }
        private static void WithContravariantGeneric()
        {
            IContravariantGeneric <LastClass> contravariantGeneric = new ContravariantGeneric <MIddleClass>();

            contravariantGeneric.Method(new LastClass());
        }