协变和逆变
来源:互联网 发布:mysql 表合集 编辑:程序博客网 时间:2024/05/01 13:43
using UnityEngine;using System.Collections;// Contravariant interface.interface IContravariant<in A> { }// Extending contravariant interface.interface IExtContravariant<in A> : IContravariant<A> { }// Implementing contravariant interface.class Sample<A> : IContravariant<A> { }public class AC{}public class BC:AC{}public class xb : MonoBehaviour {public delegate void DContravariant<in A>(A argument);// Methods that match the delegate signature.public static void SampleControl(AC control){ }public static void SampleButton(BC button){ }public void Tests(){// Instantiating the delegates with the methods.DContravariant<AC> dControl = SampleControl;DContravariant<BC> dButton = SampleButton;dControl (new AC());dButton (new BC());dControl (new BC());// You can assign dControl to dButton// because the DContravariant delegate is contravariant.dButton = dControl;//error://dControl = dButton;// Invoke the delegate.//参数必须与dButton定义的类型相同,否则会报错dButton(new BC()); }static void Test(){IContravariant<AC> iobj = new Sample<AC>();IContravariant<BC> istr = new Sample<BC>();// You can assign iobj to istr because// the IContravariant interface is contravariant.istr = iobj;//error: Assets/_Test/xb.cs(39,17): error CS0266: Cannot implicitly convert type `IContravariant<BC>' to `IContravariant<AC>'. An explicit conversion exists (are you missing a cast?)//iobj = istr; AC ac = new AC ();BC bc = new BC ();ac = bc;//error:annot implicitly convert type `AC' to `BC'. An explicit conversion exists (are you missing a cast?)//ac = bc;}}
泛型接口:子类实现的泛型接口指向父类实现的泛型接口需逆变(in),父类实现的接口指向子类实现的接口需协变(out)
泛型委托:子类泛型委托变量指向父类泛型委托变量需逆变,父类委托指向子类委托需协变(貌似无法协变)
0 0
- 协变和逆变
- 协变和逆变
- 协变和逆变
- 协变和逆变
- C# 4 协变和逆变
- 委托中的协变和逆变
- c# 委托 协变和逆变
- scala中的协变和逆变
- C# 中的协变和逆变
- 什么是协变和逆变
- C# 协变和逆变
- Java协变和逆变
- 第六节:协变和逆变
- Scala之协变和逆变
- 协变和逆变之疑问
- C# 协变和逆变
- C#的协变和逆变
- C# 协变和逆变
- 小胖说swift09-------- swift设置MJReflsh
- maven项目pom中添加依赖,但是jar无法引入项目
- [iOS开发]基础一:视图控制器(VC)的生命周期(init,viewWillApper,viewDidLoad......)
- 这部国产良心剧,唯一的不足就是太短了
- maven远程仓库配置
- 协变和逆变
- React Native调用Android原生组件
- 八大内部排序 -- 堆排序
- SICP 1.16-1.19
- 关于一个炫酷动画引发的血案
- Socket通信
- Go-defer,panic,recover
- c++中的重载,重写,重定义
- CoreOS + Docker 搭建本地虚拟机测试环境