• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#泛型初探

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

   最近在学习.NET 2.0了(说来惭愧呀,万多年前就出VS2005了,现在才想起学.NET 2.0),粗略看了下,2.0版本较1.1版本多了不少新的特性,比如MaterPage,Theme,无刷新Call Server等,页面生命周期也多了不少方法,可以更精确的控制页面的呈现过程,令人激动呀。不过今天要说的不是.NET FrameWork 2.0,而是新版C#中的新特性:泛型 

   还是先看看下面一段代码吧:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace TestConsole2005 
 


   泛型为我们解决了什么问题呢? 
   在没有泛型以前,我们在定义变量时都是将它的类型硬编码,比如:

TestClass mt  = new TestClass(); 

   这样在客户端就没有办法改变mt的类型了,除非使用反射,但反射是在运行时指定类型信息,泛型则不同,泛型是在客户端编码时指定类型信息,比如上面的:

Test<TestClass, TestClass2> v = new Test<TestClass, TestClass2>();

   这一句就是在实例化Test类时为T和T2指定详细的类型信息。
   把这个与下面的运行结果做个比较(只是把类型互换了)就知道泛型的工作方式了:

Test<TestClass2, TestClass> v = new Test<TestClass2, TestClass>(); 

   为什么要使用泛型,其实反射也一样可以实现这样的功能。原因在于使用泛型可以保证类型的安全,而反射是到运行时才绑定类型信息,这样就很有可能出现类型不匹配的情况,而编译器是无法发现的。 

   最后说明下:

Public class Test<T,T2> where T:ITest,new() where T2:ITest,new() 

   T和T2声明了Test类中的两个泛型类型,他们可以在客户端实例化该类时被显式指定,where是C#2005才有的用于约束泛型类型的关键字,上面的表达式是指泛型T和T2必须指定为实现了ITest接口的类,并且该类可以被实例化。 

   泛型还可以代替传统的简单工厂模式,总之,泛型的出现是为了支持客户端指定类型信息,而反射是运行时指定类型信息。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
用NPOI、C#操作Excel表格生成班级成绩单发布时间:2022-07-13
下一篇:
C#实现中国天气网XML接口测试发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap