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(); }
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(); }
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); }