Beispiel #1
0
        static void Main(string[] args)
        {
            var del1 = new CovariantDelegate <MyParentType>(MyStaticMethodWithReturnParentType);
            var del2 = new CovariantDelegate <MyParentType>(MyStaticMethodWithReturnChildType);

            // Error
            //var del3 = new CovariantDelegate<MyChildType>(MyStaticMethodWithReturnParentType);
            var del4 = new CovariantDelegate <MyChildType>(MyStaticMethodWithReturnChildType);

            var del5 = new ContravariantDelegate <MyParentType>(MyStaticMethodWithInParentType);
            // Error
            //var del6 = new ContravariantDelegate<MyParentType>(MyStaticMethodWithInChildType);

            var del7 = new ContravariantDelegate <MyChildType>(MyStaticMethodWithInParentType);
            var del8 = new ContravariantDelegate <MyChildType>(MyStaticMethodWithInChildType);

            del1();
            del2.Invoke();
            del4();
            del5(new MyParentType());
            del7(new MyChildType());
            del8(new MyChildType());

            var myType = new MyType();

            var del9  = new CovariantDelegate <MyParentType>(myType.MyMethodWithReturnParentType);
            var del10 = new CovariantDelegate <MyParentType>(myType.MyMethodWithReturnChildType);

            del9();
            del10();

            Console.ReadLine();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            #region 泛型调用
            //泛型委托
            InputGenericsDelegate <int> inputGenericsDelegate = (p) => { Console.WriteLine("泛型委托"); };

            //泛型类
            MyGenerics <string> myGenerics = new MyGenerics <string>();

            //泛型方法
            myGenerics.GenericsMethod <string>("泛型方法");
            myGenerics.GenericsMethod <string, int>("泛型方法");
            #endregion

            #region 泛型可变性
            //协变
            CovariantDelegate <string> covariantDelegateStr = () => { return("协变泛型委托"); };
            CovariantDelegate <object> covariantDelegate    = covariantDelegateStr;

            //逆变
            ContravariantDelegate <object> contravariantDelegateObj = (p) => { Console.WriteLine("逆变泛型委托"); };
            ContravariantDelegate <string> contravariantDelegate    = contravariantDelegateObj;
            #endregion

            Console.ReadKey();
        }
Beispiel #3
0
        static void Main1(string[] args)
        {
            Planet p = new Planet();
            Earth  e = new Earth();

            CovariantDelegate varCovariantDelegate = new CovariantDelegate(p.CallingPlanet);

            varCovariantDelegate();

            varCovariantDelegate = new CovariantDelegate(e.CallingEarth);
            varCovariantDelegate();

            ContravariantDelegate varContravariantDelegate = new ContravariantDelegate(PlanetParamMethod);

            varContravariantDelegate(e);

            varContravariantDelegate = new ContravariantDelegate(EarthParamMethod);
            varContravariantDelegate(e);
        }