C# 泛型约束

约束说明
T : 结构 T必须是值类型。可以指定除 Nullable 以外的任何值类型。
T : 类 T必须是引用类型,包括任何类、接口、委托或数组类型。
T : 接口名称 T必须继承该接口,并实现其中的所有方法。可以指定多个接口约束。
T : 类名称 T必须该类本身或者继承其的基类类。
T : new() T必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

 

1.结构约束

static void Main(string[] args)
{
	List<int> listint = new List<int>();
}

//T : struct  必须是值类型
public class List<T> where T : struct{}

  

2.类关键字约束

static void Main(string[] args)
{
	List<string> liststring = new List<string>();
}

//T : class  必须是引用类型
public class List<T> where T : class {}

  

3.接口名称约束

static void Main(string[] args)
{
	List<B> listB = new List<B>();
}

//T : C  继承接口并实现接口中所有方法
public class List<T> where T : C {}

public interface C
{
    bool Init();
}

//B继承接口C,因为C中含有方法,所有需将其全部实现
public class B : C
{
    public bool Init()
    {
        throw new NotImplementedException();
    }
}

  

4.类名称约束

static void Main(string[] args)
{
	List<A> listA = new List<A>();
}

//T : A  类本身或其基类
public class List<T> where T : A {}
public class A {}

  

5.new () 约束

static void Main(string[] args)
{
	List<A> listA = new List<A>();
}

//T : A, new()  类本身或其基类,同时要包含无参构造函数
public class List<T> where T : A, new() {}

//默认就有无参构造函数
public class A {}

  

  

posted @ 2022-10-29 17:41  microsoft-zhcn  阅读(92)  评论(0编辑  收藏  举报