zoukankan      html  css  js  c++  java
  • 记录C#泛型

    常见的泛型类型

    泛型类
    class MyClass<T>
    {
        //......
    }
    
    泛型接口
    interface  GenericInterface<T>
    {
        void  GenericMethod(T t);
    }
    
    泛型方法
    public void MyGenericMethod<T>()
    {
         //......
    }
    
    泛型数组
    public T[] GenericArray;
    
    泛型委托
    public delegate TOutput GenericDelagete<TInput, TOutput>(TInput input);
    
    泛型结构
    struct MyGenericStruct<T>
    {
    
    }

    泛型约束

      约束   说明
      T:结构   类型参数必须是值类型
      T:类   类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
      T:new()   类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。
      T:<基类名>   类型参数必须是指定的基类或派生自指定的基类。
      T:<接口名称>   类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。

     1、基类约束

     1 /// <summary>
     2 /// 基类约束:约束T必须是People类型或者是People的子类
     3 /// </summary>
     4 /// <typeparam name="T"></typeparam>
     5 /// <param name="tParameter"></param>
     6 public static void Show<T>(T tParameter) where T : People
     7 {
     8     Console.WriteLine($"{tParameter.Id}_{tParameter.Name}");
     9     Parameter.Hi();
    10 }

    注意:

    基类约束时,基类不能是密封类,即不能是sealed类。sealed类表示该类不能被继承,在这里用作约束就无任何意义,因为sealed类没有子类。

    2、接口约束

    复制代码
    /// <summary>
    /// 接口约束
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="t"></param>
    /// <returns></returns>
    public static T Get<T>(T t) where T : ISports
    {
        t.Pingpang();
        return t;
    }
    复制代码

     3、引用类型约束 class

    引用类型约束保证T一定是引用类型的。

    复制代码
     1 /// <summary>
     2 /// 引用类型约束
     3 /// </summary>
     4 /// <typeparam name="T"></typeparam>
     5 /// <param name="t"></param>
     6 /// <returns></returns>
     7 public static T Get<T>(T t) where T : class
     8 {
     9     return t;
    10 }
    复制代码

     4、值类型约束  struct

    值类型约束保证T一定是值类型的。

    复制代码
     1 /// <summary>
     2 /// 值类型类型约束
     3 /// </summary>
     4 /// <typeparam name="T"></typeparam>
     5 /// <param name="t"></param>
     6 /// <returns></returns>
     7 public static T Get<T>(T t) where T : struct
     8 {
     9     return t;
    10 }
    复制代码

     5、无参数构造函数约束  new()

    复制代码
     1 /// <summary>
     2 /// new()约束
     3 /// </summary>
     4 /// <typeparam name="T"></typeparam>
     5 /// <param name="t"></param>
     6 /// <returns></returns>
     7 public static T Get<T>(T t) where T : new()
     8 {
     9     return t;
    10 }
    复制代码

     泛型约束也可以同时约束多个,例如:

    复制代码
    1 public static void Show<T>(T tParameter)
    2             where T : People, ISports, IWork, new()
    3 {
    4     Console.WriteLine($"{tParameter.Id}_{tParameter.Name}");
    5     tParameter.Hi();
    6     tParameter.Pingpang();
    7     tParameter.Work();
    8 }
    复制代码

     注意:有多个泛型约束时,new()约束一定是在最后。

    转载:https://www.cnblogs.com/dotnet261010/p/9034594.html

    转载:https://blog.csdn.net/kebi007/article/details/77800954

  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/chenbingquan/p/10801182.html
Copyright © 2011-2022 走看看