.NET Core泛型约束

.NET Core泛型约束

  如果一个类/引入了泛型类型,那么可以对引入的泛型写一个约束,让传入的泛型类型必须具备某些条件才能传入

public class Person<T> where T : base-class  //类型T必须是base-class的子类
public class Person<T> where T : interface   //类型T必须实现interface的接口
public class Person<T> where T : class  //类型T必须是引用类型
public class Person<T> where T : struct  //类型T必须是值类型
public class Person<T> where T : new()  //类型T必须有一个无参的构造函数

  泛型类型不仅可以用于类的定义,还可以用于方法的定义

public T Person<T> (T t) where T : new()
{
    T t1=new T();
    t=t1;
    return t;
}

  泛型类可以有子类,子类可以选择继承父类的引入泛型类型,也可以选择直接继承父类某种特定类型,也可以引入新的泛型类型

public class Person<T> {}
public class Student<T>:Person<T>{}//Student继承了父类的泛型类型引入

public class Person<T> {}
public class Student:Person<int>{}//Student继承了引入int类型的父类

public class Person<T> {}
public class Student<T,TKey>:Person<T>{}//Student继承了引入泛型类型的父类,自己也引入了新的类型

   封闭类型参数的时候(就是确定泛型参数的类型),可以将类自己作为具体的类型如:

public class Person<T> : Where T :Person<T>{}//表示引入的类型必须继承自己

public class Person:IEquatable<Person>//表示封闭泛型类型为自己
{
    public string Name{get;set;}
    public bool Equals(Person p)
    {
        return p.Name==Name;
    }
}

   同一个类中不同封闭类型的静态成员数据相互独立

posted @ 2022-10-01 10:33  lrplrplrp  阅读(85)  评论(0编辑  收藏  举报