zoukankan      html  css  js  c++  java
  • c# 泛型的抗变和协变

    namespace test
    {
    
        // 泛型的协变,T 只能作为返回的参数
        public interface Class1<out T>
        {
            T Get();
            int Count { get; }
        }
        public class Class2 : Class1<String>
        {
            public String Get()
            {
                return "";
            }
            public int Count { get { return 1; } }
        }
        // 泛型的抗变,T在方法中只能作为传入参数
        public interface Class3<in T>
        {
            void Get(T t); // 作为参数
            // T GetT();//报错
        }
        public class Class4 : Class3<int>
        {
            public void Get(int age)
            {
    
            }
           
        }
    }

      使用out(协变)可以实例化 子类,协变  : 可以让右边 用子类,让泛型更方便

     不加  out  报错:

    逆变 : 可以让右边 用父类,实例化父类

    泛型委托

     public delegate void delega<in T>(string name);
    
            static  void  get<T>(string name)
            {
    
    
            }
            static void Main(string[] args)
            {
                delega<int> delega = new delega<int>(get<int>);
                delega += new delega<int>(get<string>);
    

      

  • 相关阅读:
    demo_38 关注页导航栏实现
    demo_37 评论列表实现_02 封装popup 及 格式化时间
    demo_37 评论列表实现_01
    SaaS
    rsyncd脚本
    rsyncd
    MySQL高可用--MHA安装
    正向代理
    zabbix 一键部署
    kvm安装
  • 原文地址:https://www.cnblogs.com/hnzheng/p/9113885.html
Copyright © 2011-2022 走看看