泛型中new()约束
类别:编程学习 浏览量:241
时间:2015-7-23 泛型中new()约束
泛型中new()约束一、.NET中支持的类型参数约束有以下几种
where T : struct T必须是一个结构类型
where T : class T必须是一个类(class)类型,不能是结构(structure)类型
where T : new() T必须要有一个无参构造函数
where T : NameOfBaseClass T必须继承名为NameOfBaseClass的类
where T : NameOfInterface T必须实现名为NameOfInterface的接口
二、泛型中new()约束基本形式
class A<T> where T : new()
三、泛型中new()约束实例
public class A<T> where :class,new()
{
public void Func()
{
T t=new T();
}
}
//泛型类T的一个实现类Test
public class Test
{
public Test(int a)
{
}
}
此时不能编译通过
解决方案:在Test类中加入无参构造函数即可。
四、泛型中new()约束的注意事项
1、泛型定义中有new()约束关键字时,表示必须有一个公共的无参的构造函数。简单点说就是你传递一个类代替T的时候,这个类必须有一个构造函数,且必须是公共的无参的。
2、当有多个约束时候,new()关键字必须放到坐后面。
3、在使用new()约束时,可以通过调用该无参构造函数来创建对象。
class Dictionary<TKey, TVal>
where TKey : IComparable, IEnumerable,new()
where TVal : IMyInterface,new()
{
public void Add(TKey key, TVal val)
{
}
}
标签:泛型
热门推荐
- linux系统内核参数优化(Linux 系统优化的一些建议内核优化)
- 菲律宾云服务器价格(菲律宾云服务器适合用来做什么?)
- docker-compose怎么被执行的(Docker Compose一键ELK部署的方法实现)
- python自动解数独教学(Python判断有效的数独算法示例)
- django连接mysql不支持中文插入(Django创建项目+连通mysql的操作方法)
- C#中的属性、和字段的区别
- 使用TLS加密通讯远程连接Docker的示例详解(使用TLS加密通讯远程连接Docker的示例详解)
- Linq中where查询
- 在mysql中如何授权(MySQL 角色role功能介绍)
- 阿里云虚拟主机如何建(什么是虚拟MFA?阿里云设置虚拟MFA登录让账户更加安全!)