• C#中的斜变性和逆变性的详解


    1,问题

      大家可以看到定义泛型类型的可以看到out和in这两个关键字,那么具体代表什么意思呢?

    2,文字解释

      C# 4.0通过两个关键字:outin来分别支持以协变和逆变的方式使用泛型。

    • 如果某个返回的类型可以由其派生类型替换,那么这个类型就是支持协变
    • 如果某个参数类型可以由其基类替换,那么这个类型就是支持逆变的。

    3,具体代码

     interface IClass<T>
        {
    
        }
        interface IClassOut<out T>
        {
    
        }
    
        interface IClassIn<in T> 
        {
          
        }
     // 没有协变和逆变
                IClass<string> str1 = null;
                IClass<object> object1 = null;
                object1 = str1;
                str1 = object1;
    
                // 协变
                IClassOut<string> str2= null;
                IClassOut<object> object2 = null;
                object2 = str2;
                // 值类型不能参与协变
                IClassOut<int> int2 = null;
                object2 = int2;
    
                // 逆变
                IClassIn<string> str3 = null;
                IClassIn<object> object3 = null;
                str3 = object3;
    
                // 值类型不能参与逆变
                IClass<int> int3 = null;
                int3 = object3;
    
                // 作用,不用自己再去做类型转换
                IEnumerable<string> aryStr = new List<string>();
                IEnumerable<object> aryobj = aryStr;
  • 相关阅读:
    操作excel语法
    MySQL exists的用法介
    vim 快捷键
    mysql中datetime比较大小问题
    MySQL CAST与CONVERT 函数的用法
    tbxvUZIAJH
    springBoot相关
    springCloud
    Spring Boot使用JavaMailSender发送邮件
    RabbitMq 消息队列
  • 原文地址:https://www.cnblogs.com/damsoft/p/6080765.html
Copyright © 2020-2023  润新知