asp.net 2.0教程 C# 2.0新特性 泛型

原创 2007年10月14日 14:54:00

尊重作者,请保留 www.it55.com 链接字样。

C#2.0作为#1.X的升级版本,为我们引入了很多新的而且很实用的特性。最重要的当属泛型(Generics)、匿名方法(Anonymous Methods)、迭代器(Iterators)和局部类(partial Types)。这些新特性在提供高度兼容性的同时,也在很大程度上提高了代码的效率和安全性。
本节我们学习有关于泛型的内容。
泛型存在的必要性:在1.X版本中,为了能适应不同类型的参数引入,我们常常需要重写一些函数,或者常常将其object化,以达到函数的通用性。但往往带给我们的是程序性能的下降和重复性劳动的增加。泛型的出现很好的解决了这个问题。其实简单的讲,泛型是一种可以传递或者灵活规范参数类型的机制。
泛型需要命名空间System.Collections.Generic的支持,可应用于类、方法、结构、接口、委托等设计中,集复用性、类型安全、高效率于一身。下面我们分别举例来看看泛型的几种使用方法。
1、泛型方法
using System;
using System.Collections.Generic;

public class GenericMethod
{
    // 静态 泛型方法
    public static string Output<T>(T t)
    {
        return "类型:" + t.GetType().ToString() + ";值:" + t.ToString();
    }
}

public partial class Generic_Method : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(GenericMethod.Output<int>(23) + "<br />");
        Response.Write(GenericMethod.Output<DateTime>(DateTime.Now) + "<br />");
    }
}

2、泛型抽象类
using System;
using System.Collections.Generic;

// 泛型抽象类
public abstract class GenericParent
{
    // 泛型抽象方法,返回值为一个泛型,加一个约束使泛型X要继承自泛型Y
    public abstract X Output<X, Y>(X x, Y y) where X : Y;

    // 泛型抽象方法,返回值为一个string类型,加一个约束使泛型X要继承自IListSource
    public abstract string Output2<X>(X x) where X : System.ComponentModel.IListSource;
}

public class GenericChild : GenericParent
{
    // 重写抽象类的泛型方法
    public override T Output<T, Z>(T t, Z z)
    {
        return t;
    }

    // 重写抽象类的泛型方法
    public override string Output2<T>(T t)
    {
        return t.GetType().ToString();
    }
}


public partial class Generic_Abstract : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GenericChild gc = new GenericChild();
        Response.Write(gc.Output<string, IComparable>("aaa", "xxx"));
        Response.Write("<br />");

        Response.Write(gc.Output2<System.Data.DataTable>(new System.Data.DataTable()));
        Response.Write("<br />");
    }
}

3、泛型接口
using System;
using System.Collections.Generic;

// 泛型接口
public interface IGenericInterface<T>
{
    T CreateInstance();
}

// 实现上面泛型接口的泛型类
// 派生约束where T : TI(T要继承自TI)
// 构造函数约束where T : new()(T可以实例化)
public class Factory<T, TI> : IGenericInterface<TI>
    where T : TI, new()
{
    public TI CreateInstance()
    {
        return new T();
    }
}


public partial class Generic_Interface : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        IGenericInterface<System.ComponentModel.IListSource> factory =
            new Factory<System.Data.DataTable, System.ComponentModel.IListSource>();

        Response.Write(factory.CreateInstance().GetType().ToString());
        Response.Write("<br />");
    }
}

4、泛型委托
using System;
using System.Collections.Generic;

public class GenericDelegate
{
    // 声明一个泛型委托
    public delegate string OutputDelegate<T>(T t);#p#分页标题#e#

    // 定义一个静态方法
    public static string DelegateFun(string s)
    {
        return String.Format("Hello, {0}", s);
    }

    // 定义一个静态方法
    public static string DelegateFun(DateTime dt)
    {
        return String.Format("Time, {0}", dt.ToString());
    }
}


public partial class Generic_Delegate : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 使用泛型委托
        GenericDelegate.OutputDelegate<string> delegate1
            = new GenericDelegate.OutputDelegate<string>(GenericDelegate.DelegateFun);

        Response.Write(delegate1("aabbcc"));
        Response.Write("<br />");

        // 使用泛型委托(匿名方法)
        GenericDelegate.OutputDelegate<DateTime> delegate2 = GenericDelegate.DelegateFun;
        Response.Write(delegate2(DateTime.Now));
    }
}

下一节我们将继续学习C# 2.0的新特性 匿名方法、迭代器、局部类 

《ASP.NET2.0经典教程-C#篇》

  • 2009年11月07日 19:26
  • 2.05MB
  • 下载

《ASP.NET 2.0经典教程——C#篇》源码

  • 2009年08月25日 17:42
  • 17.87MB
  • 下载

ASP.NET 2.0经典教程——C#篇 (試讀)

ASP.NET 2.0经典教程——C#篇 书名:ASP.NET 2.0经典教程——C#篇 作者:(美)哈特 著,孟宪瑞,易磊 译 来源:人民邮电出版社 出版时间:200...
  • zhaoxiaoyang5156
  • zhaoxiaoyang5156
  • 2007-08-10 11:03:00
  • 1148

C# 2.0 新特性

分部类型、泛型、可空值类型、轻量级事务管理器和角色提供程序。
  • ilovewebservice
  • ilovewebservice
  • 2011-03-29 11:23:00
  • 1299

asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

asp.net2.0学习历程 菜鸟到中级程序员的飞跃--30本好书点评作者:清清月儿主页:http://blog.csdn.net/21aspnet/          时间:2007.5.16学历历...
  • 21aspnet
  • 21aspnet
  • 2007-05-16 23:34:00
  • 57246

.Net大局观(2).NET Core 2.0 特性介绍和使用指南

.NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,介绍了.NET Core 2.0新特性、工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学...
  • zhangjunqis
  • zhangjunqis
  • 2017-08-18 14:38:27
  • 4781

asp.net core 2.0 入门攻略 第一章 环境部署

一、首先大家先部署环境安装 因为大家当前是研究学习用途,所以建议大家使用VS社区版...
  • loongsking
  • loongsking
  • 2017-10-07 09:40:05
  • 2191

c#2.0新特性:(一)泛型(Generics)

为了提高应用程序的效率和可用性,C#2.0引入了泛型概念.C#泛型有些类似C++的摸版。(一)特点        泛型具有以下功能特点:     一、使用泛型可以定义类型安全的数据结构,而无需使用实际...
  • zhouhuan965
  • zhouhuan965
  • 2012-12-27 16:19:57
  • 677

.Net Framework 2.0泛型的反射使用

 在.Net Framework 2.0中引入了范型(Generic)的概念,这可以说是一个重大的改进它的好处我在这里也不用多说,到网上可以找到非常多的说明。  我在这里要和大家说的是怎么通过反射使用...
  • powerboy
  • powerboy
  • 2007-11-14 14:05:00
  • 701

.NET2.0之泛型

.NET12.0相对于.NET 1.1增加了泛型的内容,其特点我认为有:(1)可以在很大程度上,简化模块的重用,使用泛型可以动态指定数据的类型(简单类型和复杂类型,或者说值类型和引用类型).这样就使得...
  • sdtsfhh
  • sdtsfhh
  • 2007-04-02 16:03:00
  • 1108
收藏助手
不良信息举报
您举报文章:asp.net 2.0教程 C# 2.0新特性 泛型
举报原因:
原因补充:

(最多只允许输入30个字)