zoukankan      html  css  js  c++  java
  • C#中的协变OUT和逆变

    泛型接口和泛型委托中经常使用可变性

     in  逆变,out  协变

    从 list<string>转到list<object> 称为协变 (string 从object 派生,那么 string 转成object 是合理的,子类替换父类是合理的,)

    从list<object> 转到 list<string> 称为逆变 (经object 转成string ,将父类转成子类,是不合理的,称为逆变)

    1.逆变代码掩饰

      static void Main(string[] args)
            {
                ICovariant<Object> iobj = new Sample<Object>();
                ICovariant<String> istr = new Sample<String>();
    
                // You can assign istr to iobj because
                // the ICovariant interface is covariant.
               // iobj = istr;
                istr = iobj; //从 object 类型转成string 类型,父类转成子类 则是逆变
                Console.ReadLine();
            }
    
            // Covariant interface.
            interface ICovariant<in R> { }
    
            // Extending covariant interface.
            interface IExtCovariant<in R> : ICovariant<R> { }
    
            // Implementing covariant interface.
            class Sample<R> : ICovariant<R> { }

    2.协变演示

       static void Main(string[] args)
            {
                ICovariant<Object> iobj = new Sample<Object>();
                ICovariant<String> istr = new Sample<String>();
    
                // You can assign istr to iobj because
                // the ICovariant interface is covariant.
               // iobj = istr;
                iobj = istr; //从 string类型转成object类型,子类型转成父类  (里氏替换原则)  则是协变
                Console.ReadLine();
            }
    
            // Covariant interface.
            interface ICovariant<out R> { }
    
            // Extending covariant interface.
            interface IExtCovariant<out R> : ICovariant<R> { }
    
            // Implementing covariant interface.
            class Sample<R> : ICovariant<R> { }
  • 相关阅读:
    PHP json_decode()解析失败 返回NULL 错误是4
    PHP 合并两个二维数组 array_map 和 array_walk 的区别
    PHP二维数组指定字段进行排序
    常用正则汇总
    PHP中json_encode()使用须知,JSON数组和JSON对象
    PHPExcel大文件块级别读取 速度快 减少占用资源
    移动端border-radius失效
    JavaScript滑动页面到顶部
    软键盘把底部div顶上去
    JavaScript滚动div
  • 原文地址:https://www.cnblogs.com/tiancai/p/4761206.html
Copyright © 2011-2022 走看看