zoukankan      html  css  js  c++  java
  • 泛型详解

    1.什么是泛型?

    泛型是.net framework 2.0 升级CLR出现的。泛型就是在有相同行为,不同参数类型的时候用到。

    2.泛型的基本语法和使用

    /// <summary>
    /// 泛型类
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    public class GenericClass<T>
    {
    }
    /// <summary>
    /// 泛型方法
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    /// <param name="t">类型参数</param>
    /// <returns></returns>
    public T Get<T>(T t)
    {
        return default(T);
    }
    /// <summary>
    /// 泛型委托
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    /// <param name="t">类型参数</param>
    /// <returns></returns>
    public delegate T GetDelegate<T>(T t);
    /// <summary>
    /// 泛型接口
    /// </summary>
    /// <typeparam name="T">占位符</typeparam>
    public interface GenericInterface<T>
    {
    }

    3.泛型约束

      3.1.基类约束(where T:BaseClass)

    /// <summary>
    /// 父类
    /// </summary>
    public class Father
    {
         public int Id { get; set; }
         public string Name { get; set; }
    }
    /// <summary>
    /// 子类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="t"></param>
    public void Show<T>(T t) where T: Father
    {
          Console.WriteLine($"{t.Name},{t.Id}");
    }

      3.2.接口约束(where T:IInterface)

    /// <summary>
    /// 泛型接口
    /// </summary>
    /// <typeparam name="T">占位符</typeparam>
    public interface GenericInterface<T>
    {
    }
    
    /// <summary>
    /// 泛型类
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    public class GenericClass<T> where T: GenericInterface<T>
    {
    }

      3.3.引用类型约束(where T:class)

    /// <summary>
    /// 泛型类
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    public class GenericClass<T> where T:class
    {
    }

      3.4.值类型约束(where T:struct)

    /// <summary>
    /// 泛型类
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    public class GenericClass<T> where T:struct
    {
    }

      3.5.无参数构造函约束(where T:new())          注意:如果有多个约束,无参数构造函约束必须放在约束的最后面

    /// <summary>
    /// 泛型类
    /// </summary>
    /// <typeparam name="T">T 是占位符</typeparam>
    public class GenericClass<T> where T:new()
    {
    }
    将来的你,一定会感谢现在努力的自己!
  • 相关阅读:
    linux-centos7-vmware 虚拟机 设置静态 ip 地址,采用 nat 模式,实现连接公网
    mysql_5.7.20 二进制包 在Linux系统中的 安装和配置
    解决windows系统80端口被占用问题
    应用系统架构演变初探
    fastdfs-nginx扩展模块源码分析
    心已落定,入驻博客园
    mac iterm 提示符序列调整
    Background removal with deep learning
    git push fatal: The remote end hung up unexpectedly
    mac sed 使用踩坑实录
  • 原文地址:https://www.cnblogs.com/GreatPerson/p/13562748.html
Copyright © 2011-2022 走看看