`

c#泛型

    博客分类:
  • C#
 
阅读更多

http://hjf1223.cnblogs.com/archive/2005/08/25/222970.aspx

 

由李建忠老师的讲座内容整理.

所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型,泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。

C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。

机制:
C#泛型能力是由CLR在运行时支持,区别于C++的编译时模板机制,和Java的编译时的“搽拭法”。这使得泛型能力可以在各个支持CLR的语言之间进行无缝的互操作。
C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以"on-demand"的方式,发生在JIT编译时。

C#泛型编译机制:
第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符
JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。
CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码;但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。

C#泛型的几个特点:
如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型,因此C#的动态泛型能力避免了C++静态模板可能导致的代码膨胀的问题。

C#泛型类型携带有丰富的元数据,因此C#的泛型类型可以应用于强大的反射技术。

C#的泛型采用“基类,接口,构造器,值类型/引用类型”的约束方式来实现对类型能数的“显式约束”,提高了类型安全的同时,也丧失了C++模板基于“签名”的隐式约束所具有的高灵活性。

泛型类型的成员:

泛型类型的成员可以使用泛型类型声明中的类型参数,但类型参数如果没有任何约束,则只能在该类型上使用从System.Object继承的公有成员。

泛型接口:
泛型接口的类型参数要么已实例化,要么来源于实现类声明的类型参数。

泛型委托:
delegate bool Predicate<T>(T value);
class x {
  static bool F(int i){..}
  static bool G(string s){..}
  static void Main()
 {
  Predicate<string> p2 = G;
  Predicate<int> p1 = new Predicate<int>(F);
 }
}
泛型委托支持在委托返回值和参数上应用参数类型,这些参数类型同样可以附带合法的约束。

泛型方法简介:
C#泛型机制只支持“在方法声明上包含类型参数”----即泛型方法
C#泛型机制不支持在除方法外的其它成员(包括属性,事件,索引器,构造器,析构器)的声明上包含类型参数,但这些成员本身可以包含在泛型类型中,并使用泛型类型的类型参数
泛型方法既可以包含在泛型类型中,也可以包含在非泛型类型中。
public class Finder{
  public static int Find<T>(T[] items,T item){
 for(int i=0 ;i<items.Length;i++)
 {
   if(..) reutrn i;
 }
 return -1
}
}
//泛型方法调用
int i = Finder.Find<int>(new int[] {1,2,3,4,5},6);

泛型约束简介:
C#泛型要求对“所有泛型类型或泛型方法的类型参数”的任何假定,都要基于“显式的约束”,以维护C#所要求的类型安全。
“显式约束”由where 子句表达,可以指定“基类约束”,“接口约束”,“构造器约束”,“值类型/引用类型约束”共4种约束。
“显式约束”并非必须,如果没有指定“显式约束”,泛型类型参数将只能访问System.Object类型中的公有方法。
以下是4种不同约束的介绍截图


分享到:
评论

相关推荐

    C#泛型、反射实例、自动生成sql语句

    本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...

    C#泛型相关讲解

    总之,C#泛型提供了一种强大而灵活的方式,使开发者能够创建类型化的代码,同时保持高性能和类型安全。通过使用泛型,我们可以减少代码重复,提高代码质量和运行效率,以及增强类型检查,从而编写出更加健壮的软件...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    在C#编程中,泛型是一种强大的工具,它允许我们编写可重用的代码,同时保持类型安全性和高效性。本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类...

    C#泛型实例Demo

    C#泛型是一种强大的编程工具,它允许在不指定具体数据类型的情况下定义类、接口和方法。这使得代码更具灵活性,同时保持了编译时类型安全性和运行时的高效性。在C#中,泛型主要体现在以下几个方面:泛型类、泛型接口...

    个人学习C#泛型总结ppt

    C#泛型是一种强大的编程工具,它为C#程序员提供了更大的灵活性和性能优化。泛型在.NET Framework 2.0中被引入,旨在解决传统集合类(如ArrayList)在处理不同类型数据时存在的性能和类型安全问题。以下是关于C#泛型...

    C#的泛型C#的泛型

    在深入理解C#泛型之前,需要了解其背后的编译原理。C#的泛型是由.NET运行时环境(CLR)支持的,这意味着泛型代码在编译阶段并不会生成针对特定类型的代码,而是生成一种特殊形式的中间语言(IL)代码。 当程序运行...

    C#泛型集合使用实例

    下面将详细探讨C#泛型集合的使用及其相关知识点。 1. **泛型接口与类** C#中的泛型接口如`IEnumerable&lt;T&gt;`和泛型类如`List&lt;T&gt;`、`Dictionary, TValue&gt;`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,...

    C#泛型接口实例

    下面我们将深入探讨C#泛型接口的概念、语法以及如何在实际开发中应用。 一、泛型接口基础 1. 定义泛型接口:泛型接口通过在接口名称后添加尖括号`&lt;T&gt;`来声明,其中`T`是类型参数,代表一个未知的数据类型。例如: ...

    c# 泛型应用实例

    下面将详细介绍C#泛型的应用实例。 1. **泛型类**:泛型类是在定义时未指定类型的类,如`List&lt;T&gt;`。`T`被称为类型参数,代表一个未知的类型。例如,我们可以创建一个名为`MyGenericClass&lt;T&gt;`的泛型类,其中`T`可以...

    高级无敌,c#泛型例子

    在"高级无敌,c#泛型例子"这个主题中,我们将深入探讨C#泛型的基本概念、优势以及如何实际应用。 首先,泛型是C#中引入的一种类型参数化机制。在定义类或方法时,我们可以使用类型参数(如`T`)来代替具体的类型,...

    [免费视频与文档]C#泛型编程大全.rar

    C#泛型编程是.NET框架中的一个重要特性,它允许开发者创建可重用的代码模板,这些模板可以在多种数据类型上工作,而无需显式地指定类型。这为开发者提供了更高的灵活性,增强了类型安全,并减少了不必要的类型转换。...

    使用C#泛型集合编写程序

    本文将深入探讨如何使用C#泛型集合来编写程序,并结合实际应用场景,帮助你更好地理解和运用这些概念。 首先,让我们理解什么是泛型。泛型是C#的一个核心特性,它允许我们在定义类、接口和方法时延迟指定类型。这样...

    C#泛型集合与非泛型集合

    ### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型...

    C#泛型使用小案例 c#经典案例.pdf

    C#泛型使用小案例 c#经典案例.pdf

    .net,C# 泛型示例代码,.net,C# 泛型示例代码

    .net,C# 泛型示例代码.net,C# 泛型示例代码.net,C# 泛型示例代码

    C#泛型 调研报告 C#泛型

    - **类型擦除**:C#泛型使用了一种称为类型擦除的技术,在编译后,所有的类型参数被替换为其实际类型,生成的IL代码中没有类型参数的概念,只有具体的类型。 - **类型约束**:在定义泛型时,可以添加类型约束,如...

    C# 泛型 C# 泛型

    C# 泛型是.NET框架中的一个重要特性,它允许开发者创建可重用的类型化代码,这些代码可以处理多种数据类型。泛型提高了代码的效率、安全性和灵活性,避免了不必要的类型转换,并提供了更强的类型检查。在C#中,泛型...

    c#泛型与集合编程.pdf

    C#泛型与集合编程是.NET框架中非常重要的部分,它们极大地增强了代码的复用性和类型安全性。在C#中,泛型允许我们创建可适应多种数据类型的类、接口和方法,而集合则是一组对象的容器,如列表、字典等。 1. **List*...

    C#泛型简介

    总的来说,C#泛型是一种强大的工具,它解决了面向对象编程中的类型安全和性能问题,增强了代码的可重用性和灵活性。理解并熟练掌握泛型是C#开发者必备的技能之一。通过泛型,开发者可以编写出更加高效、类型安全且...

    C#泛型学习和理解代码示例

    C#泛型是.NET框架中的一个强大特性,它允许我们创建可重用的类型,这些类型可以在多种数据类型上工作,而无需重复编写相同代码。泛型的主要目标是提高代码的类型安全性和性能,同时减少类型转换的需要。在本文中,...

Global site tag (gtag.js) - Google Analytics