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 where T : Access
    {
    }


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

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

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

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

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


    }

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


    }


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



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


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

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

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

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

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


    }

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


    }


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






你可能感兴趣的:(学习区4【ASP.Net,C#】)