首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言版
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [计算机专题]彻底剖析C#2.0泛型类的创建…
· [学习辅导]简单方法记录Oracle语句的…
· [学习辅导]掌握Oracle数据库的表快照…
· [学习辅导]深入讲解Memory_target与自…
· [学习辅导]如何才能解决JOB的Interva…
· [学习辅导]网络主机和交换机端口位置…
· [学习辅导]企业无线安全问题综合解决…
· [学习辅导]网络配置讲解之路由器加三…
· [学习辅导]在局域网维护中的注意事项
· [学习辅导]如何远程轻松监控网络工作…
 精品课程
· [精品课程推荐]08年投资项目管理师考…
· [精品课程推荐]08年职称日语考试辅导…
· [精品课程推荐]08年环境影响评价师辅…
· [精品课程推荐]08年质量资格考试辅导…
· [精品课程推荐]08年会计职称辅导报精…
· [精品课程推荐]08年建筑师考试辅导京…
· [精品课程推荐]08职称英语考试辅导王…
· [精品课程推荐]08年咨询工程师考试名…
· [精品课程推荐]08年监理工程师考试辅…
· [精品课程推荐]经济师考试网上辅导报…
 考试动态
· [二级考试动态]重庆:计算机等级考试考点…
· [二级考试动态]2008年计算机等级考试时间…
· [二级考试动态]上海:2008年上半年全国计…
· [二级考试动态]北京:2007年9月计算机等级…
· [二级考试动态]2007年12月全国计算机职业…
· [二级考试动态]青岛:2008年上半年计算机…
· [二级考试动态]宁夏:2007年9月计算机等级…
· [二级考试动态]北京地区计算机等级考试10…
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
 试题下载
· [试题下载]2007年计算机等级考试二级…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]2007年9月二级VB试题答案
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VF模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]VC++中利用/GS开关防止缓冲…
· [试题下载]2007年4月计算机等级考试二…
 学习辅导
· [学习辅导]在SQLServer2005中用语句创…
· [学习辅导]MoreEffectiveC++:指针与…
· [学习辅导]MoreEffectiveC++:不使用…
· [学习辅导]Linux下C++异常处理技巧--…
· [学习辅导]如何使编译后的程序运行时…
· [学习辅导]2007年计算机二级VF编辑
· [学习辅导]2007年C语言辅导:可移植性
· [学习辅导]2007年制作风格独特的按钮
· [学习辅导]2007年VFP中使用Grid控件设…
· [学习辅导]MoreEffectiveC++之考虑变…
 

彻底剖析C#2.0泛型类的创建和使用

文章录入:admin    责任编辑:admin   2008-4-14 16:54:07  来源:羊城晚报  点击数:
 

  "一次编码,多次使用",这就是引入泛型的根源。在以前的C++中称为模板,C#泛型通过算法和数据结构支持独立编码。例如,泛型列表意味着,你不必再重写一个强类型集合。在本文中,作者将向你展示定义和使用泛型是多么容易的事情-请注意,长期以来泛型一直被认为是最高级和最困难的术语。

  一、 简介

  泛型现在在任何一种语言中都被认为是一个高级的强有力的术语。当我在C++中第一次接触模板时,我对之有些疑惑。之后,我读了Bjarne Stroustrop的《The Design and Evolution of C++》,才发现模板的使用就象C中的宏和用之来取代的简单串替换模板一样容易。其实,模板和泛型是相同的东西-尽管它们的实现稍微不同。

  C#泛型支持在使用点处才定义算法及其数据类型。在C#的一些早期版本中,我们可以证明没有泛型也可以工作,因为每种类型都是派生于一个公共基类型-object。这意味着程序员可以基于object类型定义一个栈类并且把一切东西放到该栈上(因为一切都派生于object)。然而,一个object栈意味着,Customer对象,Integer对象以及假想的对象都能被放置到同一个栈的实例上。结果是,开发者要子类化数据类型来把数据类型绑定到他们要与之交互的东西上去。例如,在编写定制的商业对象时,我们就建议定义派生于System.Collections.CollectionBase的强类型集合。原因很简单:基于object定义一切被认为是弱类型定义。

  业界的高手们在数十年前就确信强类型优于弱类型,所以.net最终支持强类型,这看上去是很自然的事情。强类型算法当然建议类型化参数-这正是我们在泛型中所用的东西。

  十几年来,我们一直在使用字母T作为类型化参数的名字。这样,在任何泛型类使用者所提供的数据类型的地方,你都能够找到T。使用泛型的关键仅仅是提供这个T。定义泛型的关键在于实现一个方法或类,并且用特定数据类型来替换掉T。

  C#中的泛型支持另外一些提炼。例如,一个方法或类可以有多个参数化的类型并且C#泛型还支持WHERE约束-它用来具体要求类型化参数的类型。例如,如果一个泛型类型必须实现接口IDisposable,那么C#泛型是支持实现这一限制的。在文章的最后我们还要看一下约束问题。
闲话少说,让我们言归正传。

  二、 使用泛型集合

  有些人问我"面向对象编程(OOP)的承诺在哪里?",我的回答是应该从两个方面来看OOP:你所使用的OOP和你创建的OOP。如果我们简单地看一下如果没有如例如Microsoft的.NET,Borland的VCL,以及所有的第三方组件这样的OO框架,那么很多高级的应用程序几乎就无法创建。所以,我们可以说OOP已经实现了它的承诺。不错,生产好的OOP代码是困难的并且可能是极具挫败性的;但是记住,你不必须一定要通过OOP来实现你的目标。因此,下面首先让我们看一下泛型的使用。

  当你用Visual Studio或C# Express等快速开发工具创建工程时,你会看到对于System.Collections.Generic命名空间的参考引用。在这个命名空间中,存在若干泛型数据结构-它们都支持类型化的集合,散列,队列,栈,字典以及链表等。为了使用这些强有力的数据结构,你所要做的仅是提供数据类型。

  列表1显示出我们定义一个强类型集合的Customer对象是很容易的。

  列表1 这个控制台应用程序包含一个Customer类和一个基于List<T>的强类型集合Customers。

using System;
using System.Collections.Generic;
using System.Text;
namespace Generics{
 class Program{
  static void Main(string[] args){
   List<Customer> customers = new List<Customer>();
   customers.Add(new Customer("Motown-Jobs"));
   customers.Add(new Customer("Fatman's"));
   foreach (Customer c in customers)
   Console.WriteLine(c.CustomerName);

[1] [2] [3] 下一页

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于本站 - 广告服务 - 站内导航 - 网站声明 - 友情链接 - 联系我们
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司 版权所有

    鄂ICP备05000022号