转载自:C#中泛型约束(where)是什么?
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()
{
}