zoukankan      html  css  js  c++  java
  • C# 泛型的逆变与协变

    泛型参数的输入与输出

      如果泛型参数不带任何修饰符,那么在分配对象时,类型参数只能是固定的类型。

        // B从A派生
        Class<A> x = new Class<A>();
        Class<A> x = new Class<B>(); // 编译错误
    

      这需要泛型的参数类型成为变体,需要in和out修饰符。

    • in:输入类型,逆变,一般用于委托或方法的输入参数。
      逆常的变,不自然地变化,父类->子类

    • out:输出类型,协变,一般用于委托或方法的返回值。
      和谐的变,很自然地变化,子类->父类

      子类派生于父类,派生程度大,拥有父类所拥有的,所以和谐的转换成父类。

        public class Program
        {
            public static void Main(string[] args)
            {
                // 逆变
                ITest1<B> t1 = new Test1<A>();
    
                // 协变
                ITest2<A> t2 = new Test2<B>();
            }
            // 示例类型
            public class A { }
            public class B : A { }
    
            // 带变体的接口
            public interface ITest1<in T> { }
            public interface ITest2<out T> { }
    
            // 实现类
            public class Test1<T> : ITest1<T> { }
            public class Test2<T> : ITest2<T> { }
        }
    

    本文来自博客园,作者:一纸年华,转载请注明原文链接:https://www.cnblogs.com/nullcodeworld/p/15238779.html

  • 相关阅读:
    WEB UI 整理
    RAT
    client 控制
    SiMay 远控
    SSH/SOCKS成为全局代理
    BypassAntiVirus
    QuasarRAT 使用
    从 Qt 的 delete 说开来
    Spectrum Analyzer test.cpp Example File
    windows下C/C++的内存泄露检测
  • 原文地址:https://www.cnblogs.com/nullcodeworld/p/15238779.html
Copyright © 2011-2022 走看看