# 泛型约束

List<T> : where T : BaseModel

  • 基类约束:

    1. 可以把T当成基类--权利

    2. T必须是BaseModel或其子类

    public T Get<t>():where T: BaseModel
    {
        
    }
    
    1
    2
    3
    4
  • 接口约束:

    public T Get<t>():where T: IBaseInterface
    {
        
    }
    
    1
    2
    3
    4
  • 引用类型约束:where T:class

    public T Get<t>():where T: class
    {
        return null;
    }
    
    1
    2
    3
    4
  • 值类型约束:where T:struct

    public T Get<t>():where T: struct
    {
        return default(T);   //default是个关键字,会根据T的类型去获得一个默认值
    }
    
    1
    2
    3
    4
  • 无参数构造函数约束:where new T()

    public T Get<t>():where T: new()
    {
        return new T();   
    }
    
    1
    2
    3
    4

泛型协变逆变

  • out 协变 covariant 修饰返回值,协变后T只能做 为返回值,不能当做参数

  • in 逆变 contravariant 修饰传入参数,逆变后T只能做为参数,不能做返回值

Last Updated: 11/11/2020, 11:10:23 AM