标签:string pulic 逆变 object 协变 返回值 搞懂 传给 IFunc
本质:里氏替换原则 子类可以代替父类 如 object = string 等式成立 但是在类里面IFunc<object> != IFunc<string> 本质是要解决泛型的入参出参问题
PS 值类型不能变
先理解引用对象方法的问题 这里有两种泛型方法
方法一
pulic class IFunc<T>{ pulic void IFunc( 入参 T ){ return } }
方法二
pulic class IFunc<T>{ pulic T IFunc( ){ return 返回值 } }
F(A) = F(B) 这个意思就F(A)引用了F(B)的地址
方法执行流程就是 F(A)的入参传给F(B)的入参 F(B)的返回值传给F(A) 这两个传递过程中要符合里氏替换原则
在了解上面的知识点的前提下 再来看逆变协变
协变 out
概念 : F(父) = F(子) 成立
例: IFunc<object> = IFunc<string>
套入上面方法执行流程 是object传给string 符合里氏替换原则还是 string传给object 符合呢 那很显然 是 属于返回值的传入的也就是方法二
那么我们标识一下这个T代表的是返回值 让编译器可以识别 这也就是协变
pulic class IFunc<out T>{ pulic T IFunc( ){ return 返回值 } }
逆变 in
概念 : F(子) = F(父) 成立
例: IFunc<string> = IFunc<object>
同理 套入上面方法执行流程 是object传给string 符合里氏替换原则还是 string传给object 符合呢 那很显然 是 属于入参的传入的也就是方法一
那么我们标识一下这个T代表的是入参值 让编译器可以识别 这也就是逆变
pulic class IFunc<in T>{ pulic void IFunc( 入参 T ){ return } }
参考:https://www.cnblogs.com/CLR010/p/3274310.html
https://www.cnblogs.com/liuzhenbao/p/12638103.html
标签:string,pulic,逆变,object,协变,返回值,搞懂,传给,IFunc 来源: https://www.cnblogs.com/liagon/p/15421094.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。