`

C#2.0-泛型

    博客分类:
  • C#
阅读更多
1. 泛型概述

使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。

泛型最常见的用途是创建集合类。

.NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。

您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。

可以对泛型类进行约束以访问特定数据类型的方法。

关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。

引用

public class GenericList<T>     //声明一个泛型类
{
    void Add(T input) { }
}


//测试泛型类

// Declare a list of type int
        GenericList<int> list1 = new GenericList<int>();
  // Declare a list of type string
        GenericList<string> list2 = new GenericList<string>();


2. ArrayList的缺点-泛型的优点

     1) 添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

      2)另一个限制是缺少编译时类型检查。因为 ArrayList 将把所有项都强制转换为 Object;换句话说,ArrayList 需要一个 type parameter。这正是泛型所能提供的。

  3)泛型List比 ArrayList 更安全并且速度更快。

3. 类型参数的约束

  在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。约束是使用 where 上下文关键字指定的。

public class GenericList1<T> where T : Employee
{

      //T只能是Employee类
}

public class GenericList2<T> where T : int
{

      //T只能是int值类型

}

4.泛型类

  泛型类最常用于集合,如链接列表、哈希表、堆栈、队列、树等,其中,像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关。

  对于大多数需要集合类的方案,推荐的方法是使用 .NET Framework 2.0 类库中所提供的类,如List, Queue,Stack,Dictionary。

5. C++ 模板和 C# 泛型之间的区别

  C# 泛型和 C++ 模板都是用于提供参数化类型支持的语言功能。然而,这两者之间存在许多差异。

C# 泛型未提供与 C++ 模板相同程度的灵活性。例如,尽管在 C# 泛型类中可以调用用户定义的运算符,但不能调用算术运算符。

C# 不允许非类型模板参数,如 template C<int i> {}。

C# 不支持显式专用化,即特定类型的模板的自定义实现。

C# 不支持部分专用化:类型参数子集的自定义实现。

C# 不允许将类型参数用作泛型类型的基类。

C# 不允许类型参数具有默认类型。

在 C# 中,尽管构造类型可用作泛型,但泛型类型参数自身不能是泛型。C++ 确实允许模板参数。

C++ 允许那些可能并非对模板中的所有类型参数都有效的代码,然后将检查该代码中是否有用作类型参数的特定类型。C# 要求相应地编写类中的代码,使之能够使用任何满足约束的类型。例如,可以在 C++ 中编写对类型参数的对象使用算术运算符 + 和 - 的函数,这会在使用不支持这些运算符的类型来实例化模板时产生错误。C# 不允许这样;唯一允许的语言构造是那些可从约束推导出来的构造。

简单实例:

          //使用System.Collections.Generic命名空间中的泛型类List
            List<int>  lInt = new List<int>();
            lInt.Add(1);
            lInt.Add(3);

            List<string>  lString = new List<string>();
            lString.Add("abc");
            lString.Add("789");

            this.listBox_testIterator.Items.Clear();
            foreach (int i in lInt)
                this.listBox_testIterator.Items.Add(i.ToString());

            this.listBox_testIterator.Items.Add("");
            foreach (string s in lString)
                this.listBox_testIterator.Items.Add(s);
分享到:
评论

相关推荐

    Microsoft .NET Framework 2.0-3.0-3.5 简体中文静默安装版

    它引入了大量新特性,如改进的性能、新的语言支持(如C# 2.0和VB.NET 2005)、泛型、匿名方法、迭代器和部分信任代码执行等。同时,.NET Framework 2.0也包含了ASP.NET 2.0,提供了更强大的Web应用程序开发能力。 2...

    C# 2.0中泛型编程初级入门教程

    ### C# 2.0中泛型编程初级入门教程 #### 泛型编程的重要性与优势 在C# 2.0版本中引入的泛型编程是面向对象编程的一个强大扩展,它允许程序员编写类型安全、可重用的代码,而无需进行运行时类型转换或使用低效的...

    C#2.0的泛型编程

    ### C#2.0中的泛型编程:理解与实践 #### 一、引言 随着技术的快速发展,软件开发领域也在不断进步。自从.NET Framework推出以来,Microsoft不断更新其产品线,以满足开发者的需求。从最初的.NET Framework 1.0到...

    C# 2.0中泛型编程思想分析

    泛型是C# 2.0中引入的关键特性,它极大地增强了C#的类型安全性和代码的可重用性。泛型允许开发者定义通用的数据结构和方法,而不必为每种特定的数据类型创建单独的类或接口。这使得代码更加简洁、高效,同时也避免了...

    C# 2.0版本 泛型

    泛型是C# 2.0版本引入的一个重要特性,旨在解决类型安全和性能问题,尤其是在数据结构和算法实现中。传统的做法,如在描述中所示的基于`Object`的堆栈实现,虽然通用,但存在性能损失和类型安全的风险。 在基于`...

    C# 2.0中泛型编程初级入门教程.doc

    泛型是C# 2.0中引入的一个重要特性,它极大地增强了代码的复用性和类型安全性,同时提升了性能。泛型允许我们在定义类、接口和方法时使用一个或多个类型参数,这些参数会在实际使用时被具体的类型替换。通过泛型,...

    C# 2.0中泛型编程初级入门教程.pdf

    ### C# 2.0中泛型编程初级入门教程知识点详解 #### 一、泛型的概念及重要性 **什么是泛型?** 泛型是一种在编程语言中支持编写可复用组件的方式,允许开发者在创建类、接口或方法时使用类型参数。这意味着,通过...

    C#学习之路--泛型

    泛型是C# 2.0引入的一个新特性,它的核心思想是推迟类型的实际确定到程序运行时。这使得开发者可以创建通用的数据结构和方法,而无需为每种可能的数据类型都编写独立的实现。通过泛型,我们可以确保代码的类型安全,...

    C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换

    ### C#2.0 泛型和强制类型转换 #### 泛型介绍 在C#2.0中,泛型是一种强大的特性,它允许程序员编写类型安全且高度可重用的代码。通过使用泛型,可以创建参数化的类型,这意味着在类、接口或方法中可以使用类型参数...

    C__2.0中泛型编程初级入门教程

    ### C# 2.0 泛型编程初级入门教程 #### 一、引言 随着.NET Framework 2.0 的发布,C# 语言引入了一系列重要的新特性,其中泛型编程便是最为突出的一个。泛型编程允许开发人员编写类型安全且可重用的组件,而无需...

    c#2.0的讲解,包括c#2.0简介,泛型,匿名方法,迭代器和不完全类的内容

    这个讲解将深入探讨这些关键特性,包括C# 2.0的简介、泛型、匿名方法、迭代器以及不完全类。 一、C# 2.0简介 C# 2.0是2005年发布的,它是.NET Framework 2.0的一部分。这个版本的目标是提高开发效率,增强类型安全...

    C#2.0完全参考手册源代码

    5. **泛型**:C# 2.0的泛型提供了一种创建可重用、类型安全且高效的代码的方法。泛型类、接口和方法允许开发者定义参数化类型,如`List&lt;T&gt;`,T代表任意类型。 6. **匿名类型**:在编译时动态创建的类型,通常用于...

    C#2.0标准文档(官方语言规范)

    1. 泛型:C# 2.0引入了泛型,这是一个革命性的变化。泛型允许开发者定义可以处理多种数据类型的类、接口和方法。这样不仅提高了代码的重用性,还通过类型检查确保了安全性,避免了不必要的类型转换。 2. 局部类型...

    完全手册:c#2.0程序设计详解电子教程

    《完全手册:C#2.0程序设计详解电子教程》是一部深入探讨C# 2.0编程技术的全面性资源,旨在帮助读者掌握C#语言的基础与高级特性,以及利用这些特性进行高效软件开发。本教程涵盖了从入门到进阶的各个方面,包括语法...

    c#2.0 宝典 源文件21-25

    《C# 2.0 宝典》是C#编程领域的一本经典著作,它深入浅出地介绍了C# 2.0版本的各种特性和应用。源文件21至25,代表了书中对应的章节实例代码,这些源程序旨在帮助读者更直观地理解并实践书中的理论知识。 在C# 2.0...

    开发人员必看的C#2.0教程...

    1. **泛型**:C# 2.0引入了泛型,这是一种可以创建类型安全的数据结构的方法,允许在不指定具体数据类型的情况下定义类和方法。泛型提高了代码的重用性和性能,避免了不必要的类型转换。 2. **匿名方法**:匿名方法...

    C#2.0示例

    C# 2.0是微软.NET Framework 2.0的一部分...通过分析给定的文件列表,我们可以推测这些示例涵盖了基本的ASP.NET Web Forms应用开发,包括页面生命周期、事件处理、部分类使用和可能的泛型、匿名方法等C# 2.0的新特性。

    C# 2.0 宝典的源代码

    C# 2.0是.NET Framework的重要组成部分,相比C# 1.0,它引入了许多新特性,例如匿名方法、迭代器、泛型、属性改进、自动属性、匿名类型等,这些都极大地提升了程序员的效率和代码的可读性。在《C# 2.0 宝典》中,你...

    c#2.0新特性(修订)

    3. **泛型**:泛型是C# 2.0中的重要特性,它允许创建类型安全且可重用的数据结构和方法,提高了代码的效率和安全性。 4. **部分类(Partial Class)**:部分类允许将类的定义分布在多个文件中,这对于大型项目和...

    关于C#、java泛型的看法

    C#自2.0版本开始引入泛型,它允许开发者在类、接口和方法中定义类型参数,从而创建可复用的代码模板。在C#中,泛型的使用通常以尖括号表示,如`List&lt;T&gt;`,其中T是类型参数。C#的泛型支持协变和逆变,这意味着在某些...

Global site tag (gtag.js) - Google Analytics