C#泛型是.NET中最常见的一种特性,接下来我们就来了解关于C#泛型的一些特性,看一下代码:
成都创新互联是一家集网站建设,尖扎企业网站建设,尖扎品牌网站建设,网站定制,尖扎网站建设报价,网络营销,网络优化,尖扎网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
- public class Dictionary
- {
- public void Add(K key, V value)
- {
- if (key.CompareTo(x) < 0) {} // Error, no CompareTo method
- }
- }
由于K可以任何类型,所以可想而知,key只能使用Object中定义的ToString等方法。代码在编译时就出错了,因为key可能不含有CompareTo方法。那么如何解决呢?一种容易想到的办法就是把key转换成IComparable,那么代码就变成了这样:
- public class Dictionary
- {
- public void Add(K key, V value)
- {
- if (((IComparable)key).CompareTo(x) < 0) {}
- }
- }
这次没有编译时错误了。但是还是要小心,因为实际使用时,如果你使用了一个没有实现IComparable的类型作参数,就会出现InvalidCastException异常。为了提供强编译时检查和减少类型转换,C#2.0泛型引入了约束(Constraints)这个概念,这是一个泛型的可选项。语法是使用where关键字指明约束的类型参数,然后加冒号,再加上类,接口,类型参数等。我们把代码变成了这样:
- public class Dictionary
where K: IComparable - {
- public void Add(K key, V value)
- {
- if (key.CompareTo(x) < 0) {}
- }
- }
这样就保证了任何为K类型参数提供的类型都实现了IComparable接口。所以我们的key就可以使用CompareTo方法了。如果我们在使用时提供了没有实现IComparable接口的类型,就会出现编译时错误,我们的约束可以不止是一个接口,可以是多个,还可以是跟类或其他约束混合,请看下面代码:
- public class EntityTable
- where K: IComparable
, IPersistable - where E: Entity, new()
- {
- public void Add(K key, E entity)
- {
- if (key.CompareTo(x) < 0) {}
- }
- }
对于约束new()可能不好理解。其实这个约束保证了提供给类型参数E的类型必须有一个public,无参的构造器。这样它就允许泛型类使用new E()创建这个类型的实例。另外指出的是,虽然可以有多个接口作约束,但至多只能有一个类。
类型参数必须小心地使用。虽然它提供了更强编译时类型检查,但是却也约束了泛型类型的一些可能的使用情况。比如说,有一个泛型类List
本文转载自小新的技术天地的博客,
原文地址:http://wdxinren.cnblogs.com/archive/2005/05/29/164392.html
【编辑推荐】
当前题目:不得不提的C#2.0泛型约束
本文地址:http://www.csdahua.cn/qtweb/news15/39615.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网