惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
腾讯CDC
T
Tailwind CSS Blog
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
The Cloudflare Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
B
Blog
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - panzhilei

Jquery Validate高级定制: 传入正则表达式,传入错误消息 如何生成1-1000的数字,并且顺序打乱 如何快速创建大文件 高晓松:不买房,买梦想 (转)XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)(附带解决DHTMLX不能用在GB2312页面编码下的中文问题) (转贴)关于多线程执行显示进度条的实例! 利用Adobe Acrobat 7.0 Professional 自带的导出图片的功能(转) 利用CURE算法来进行文本聚类 集体智慧编程 英文版 (转)ie与firefox对节点childNode的不同解释。 - panzhilei - 博客园 (转)正则表达式学习参考 装了卡巴后VS 2003不能启动调试错误的解决方案 呵呵,日期小小技巧 godaddy的win主机发邮件的组件 获取设置本地当前默认打印机 今晚就出发回家啦!!!! (转载)ASP.NET MVC结合jQuery插件进行数据验证 读取excel的时候,往往多了很多空白行,下面的代码是去掉空白行的 博客园页面有问题,
where泛型约束
panzhilei · 2008-11-05 · via 博客园 - panzhilei

原文:http://www.cnblogs.com/mrhgw/articles/777368.html

where用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量.如下:
public class MyGenericClass<T> where T:IComparable { }
  除了接口约束,where还可以包括基类约束,以指出某个类型必须将指定的类作为基类(或者就是该类本身),才能用作该泛型的类型参数.如下:
class MyClassy<T, U>
    where T : class
    where U : struct
{
}
  where还可以包括构造函数约束,可以使用new运算符创建类型参数的实例;但类型参数必须受构造函数约束new()的约束.new()约束可以让编译器知道:提供的任何类型参数都必须具有可访问的无参数构造函数,如下:
public class MyGenericClass <T> where T: IComparable, new()
{
    // The following line is not possible without new() constraint:
    T item = new T();
}
   对于多个类型参数,每个类型参数都使用一个where,例如:
class Dictionary<TKey,TVal>
    where TKey: IComparable, IEnumerable
    where TVal: MyI
{
    public void Add(TKey key, TVal val)
    {
    }
}
   还可以将约束附加到泛型方法的类型参数,例如:
public bool MyMethod<T>(T t) where T : IMyInterface { }
   注意:对于委托和方法两者来说,描述类型参数约束的语法是一样的:
delegate T MyDelegate<T>() where T : new()