注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网事

备忘录

 
 
 

日志

 
 

关于C#泛型的理解  

2008-11-19 16:40:49|  分类: .Net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险

参见MSDN

http://msdn2.microsoft.com/zh-cn/library/512aeb7t(VS.80).aspx

.NET Framework中提供了很多泛型类,特别常用的就有泛型版的List集合

举个例子:

你自己定义了一个类

public class Student

{

//属性,方法定义

}

你现在要创建一个学生集合(班),那么可以使用ArrayList

ArrayList Students = new ArrayList();

Students.add(new Student());

这个时候要把Student装箱变为object类型.

等你从集合中取的时候,就要拆箱

Student stu = (Student)Students[0];

这个时候要求集合使用者必须知道对象的类型,如果拆箱时类型转换错误,就会抛出异常,这就是类型不安全的.

那么我们使用list<T>,这里的T就是泛型,可以使用任何类型的对象代替.

List<Student> list = new List<Student>();

list.add(new Student());

使用者的代码:

Student stu = list[0];

这里的类型就避免了装箱拆箱,避免了性能损失,同时也是类型安全的.

再举个例子:

创建一个数据库连接容器

public class Container<T> where T : DBConnection //这个是泛型的约束,就是说这个T的类型必须是继承于这个DBConnection类的子孙类.

{

public void Add(T connection)

{

//这里的T就是一个类型,具体是什么类型,是在编译时由客户代码确定的.

}

public void Remove()

{

}

//....

}

具体的还是看看MSDN吧,总之泛型是在编译时确定类型的,一种类型安全的特殊的类,同时可以避免装箱拆箱的性能损耗.

  评论这张
 
阅读(285)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018