C#中泛型约束(where)是什么?

泛型约束: 确保泛型类使用的参数是提供特定方法的类型。

详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/generics/generic-classes


约束

说明

T:结构

类型参数必须是值类型。

T:类

类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。

T:new()

类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。

T:<基类名>

类型参数必须是指定的基类或派生自指定的基类。

T:<接口名称>

类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。

T:U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。



    T约定:只能是Access类型或者Access的子类型
    public class BaseAccess<T> where T : Access
    {
    }


    T约定:T只能传入接口的本身和实现了此接口的类
    public class BaseAccess<T> where T : IAggregateRoot
    {
    }

   引用类型约束演示
    public class BaseAccess<T> where T : class
    {
    }

   值类型约束演示
    public class BaseAccess<T> where T : struct
    {
    }

    构造器约束
    public class BaseAccess<T> where T : new()
    {
         MongoContextAdapter _context;
        public BaseAccess(MongoContextAdapter context)
        {
            this._context = context;
        }
    }

    一个类型占位符有两个约束   必须是引用类型,必须提供构造函数
    public class BaseAccess<T> where T : class,new()
    {


    }

    K必须约定是一个引用类型
    V必须约定是一个值类型
    public class BaseAccess<K, V>
        where K : class,new()
        where V : struct
    {


    }


    /// 泛型参数K必须继承V         K,V必须是引用类型,必须提供构造函数
    public class BaseAccess<K, V>
        where K : V
        where K : class,new()
        where V : class,new()
    {
    }



    T约定:只能是Access类型或者Access的子类型
    public class BaseAccess<T> where T : Access
    {
    }


    T约定:T只能传入接口的本身和实现了此接口的类
    public class BaseAccess<T> where T : IAggregateRoot
    {
    }

   引用类型约束演示
    public class BaseAccess<T> where T : class
    {
    }

   值类型约束演示
    public class BaseAccess<T> where T : struct
    {
    }

    构造器约束
    public class BaseAccess<T> where T : new()
    {
         MongoContextAdapter _context;
        public BaseAccess(MongoContextAdapter context)
        {
            this._context = context;
        }
    }

    一个类型占位符有两个约束   必须是引用类型,必须提供构造函数
    public class BaseAccess<T> where T : class,new()
    {


    }

    K必须约定是一个引用类型
    V必须约定是一个值类型
    public class BaseAccess<K, V>
        where K : class,new()
        where V : struct
    {


    }


    /// 泛型参数K必须继承V         K,V必须是引用类型,必须提供构造函数
    public class BaseAccess<K, V>
        where K : V
        where K : class,new()
        where V : class,new()
    {
    }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值