`

C#.net泛型知识(一)

    博客分类:
  • .Net
阅读更多

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

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#.NET课程设计指导 C#.NET课程设计指导

    本课程设计指导将深入探讨C#.NET的核心概念和技术,旨在帮助学生和初学者掌握这一技术,提升他们的编程技能。 首先,我们需要理解C#.NET的基础知识。C#(读作"C sharp")是微软公司推出的一种面向对象的编程语言,...

    C#.NET基础知识

    C#.NET基础知识是微软开发的一款面向对象的编程语言,它基于.NET框架,广泛应用于桌面应用、Web应用、移动应用以及游戏开发等领域。对于初学者和希望深入理解C#.NET的开发者来说,掌握以下核心概念至关重要。 1. **...

    c#.NET应用编程150例

    《C#.NET应用编程150例》是一本专注于C#.NET编程实践的教程,它包含了大量的实例,旨在帮助读者深入理解和掌握C#.NET编程语言的精髓。这本教程不仅覆盖了基础语法,还深入到高级特性,为开发者提供了一个全面的学习...

    C#.NET 编程经典-从VB6.0到VC#.NET 快速进阶

    VB6.0是一种基于事件驱动的面向对象编程语言,而C#.NET则更加现代化,支持更丰富的面向对象特性,如接口、抽象类和泛型。书中可能详细解释了这两种语言的关键差异,包括C#.NET的类型系统、命名空间、访问修饰符以及...

    C#.NET教学代码

    C#.NET是一种强大的编程语言,由微软开发,用于构建各种应用程序,从桌面应用到Web应用,再到移动应用。本教学代码资源集成了多个模块,旨在帮助学习者逐步掌握C#.NET的核心概念和技术。 首先,我们要了解C#.NET的...

    C#.NET 开发者手册(English)

    《C#.NET 开发者手册》是一本专为C#.NET开发者量身打造的重要参考资料,它深入浅出地讲解了C#.NET编程的各种核心概念和技术。这本书英文版的出现,为国内开发者提供了一个学习和掌握C#.NET技术的宝贵资源。 C#.NET...

    【ASP.NET编程知识】.net泛型通用函数的特殊问题的解决方法.docx

    在.NET框架中,泛型是一种强大的工具,它允许开发者创建可重用的类型安全的代码,无需为每个数据类型创建单独的实现。然而,正如在文档中提到的,泛型存在一些特殊问题,特别是当涉及到需要操作符重载或特定行为(如...

    C#.NET程序设计案例教程

    1. **模块一、二、三**:通常涵盖C#.NET的基础知识,包括C#语法基础,如变量、数据类型、运算符、控制结构(如if、switch、for、while等),以及函数的使用。此外,还会介绍类与对象的概念,这是面向对象编程的基础...

    Visual C#.Net深入编程

    《Visual C#.Net深入编程》是一本面向有一定编程基础的读者的专业书籍,旨在帮助读者深入理解和掌握使用Visual C#.Net进行软件开发的核心技术。Visual C#.Net是Microsoft .NET框架的一部分,它是一种强大的面向对象...

    C#.NET 开发者手册

    《C#.NET 开发者手册》是一本专为C#.NET开发者量身打造的权威指南,旨在帮助读者全面深入地理解和应用C#编程语言。这本书不仅适合初学者,也适用于有一定经验的程序员,通过详尽的讲解和实例,提供了一个完善的学习...

    C#.net程序设计期末复习材料

    在C#.NET中,你需要理解以下几个关键知识点: 1. **基础语法**:包括变量声明、数据类型(如int、string、bool等)、运算符(算术、比较、逻辑等)、控制流(if-else、switch、for、while等)以及方法定义。 2. **...

    C#.NET网络核心编程PDF,内有大量的实例和代码分析,很好的教程。

    总结,《C#.NET网络核心编程》教程全方位覆盖了C#进行网络编程所需的关键技能,从基础知识到高级应用,从理论讲解到实战演练,对于想要深入学习C#.NET网络编程的开发者来说,是一本极具价值的参考书。通过系统学习,...

    《Visual C#.NET程序设计(修订本)》作者杨晓光—PPT

    《Visual C#.NET程序设计(修订本)》是由著名...以上知识点是《Visual C#.NET程序设计(修订本)》一书中的主要内容,通过PPT形式的学习材料,可以更加直观地理解和掌握这些概念,并通过实例加深对C#.NET编程的理解。

    《Visual C#.NET案例开发集锦 第2版》

    《Visual C#.NET案例开发集锦 第2版》是一本专为C#初学者和有一定经验的开发者设计的书籍,其核心目标是通过丰富的案例帮助读者深入理解和掌握C#.NET编程技术。本书不仅覆盖了C#的基础语法,还涵盖了.NET框架的应用...

    Visual C#.NET 应用编程150例源码

    《Visual C#.NET 应用编程150例源码》是一份专为学习和实践C#.NET编程的宝贵资源,包含了丰富的实例代码,旨在帮助开发者深入理解和掌握C#.NET编程语言的应用技巧。通过这些实例,你可以学习到如何在.NET框架下使用...

    C#.net入门经典教程

    C#.NET是微软公司推出的一种面向对象的编程语言,它基于.NET Framework,为开发者提供了强大的开发环境和丰富的类库,广泛应用于桌面应用、Web应用、移动应用以及游戏开发等领域。本教程将深入浅出地介绍C#.NET的...

    C#.net案例解析光盘

    总的来说,“C#.net案例解析光盘”是一个全面的资源,它不仅教授C#.NET的基础,还强调实际应用,通过案例分析帮助开发者提升技能,理解如何在实际项目中应用这些理论知识。无论你是初学者还是有经验的开发者,这个...

    C#.NET程序设计课件

    综上所述,C#.NET程序设计涵盖了许多核心概念和技术,这个课件将引导学习者逐步掌握这些知识,为成为一名合格的C#开发者打下坚实基础。通过深入学习和实践,你可以创建出界面友好、功能强大的应用程序。

    8 Visual C#.NET

    1. "7 Visual C#.NET入门与进阶":这本书可能是系列教程的一部分,内容可能与标题描述相似,提供了关于C#的基础知识和深入技巧,适合不同层次的学习者。 2. "Professional C# 2005 with .NET 3.0高级编程(第5版)":...

Global site tag (gtag.js) - Google Analytics