c#中泛型

整理一下昨天学习的泛型,有不对的地方欢迎指正:

  1. 泛型类

定义一个类,这个类中某些字段的类型不确定,这些类型可以在构造类时确定下来

 

 

 

 

 

    2.泛型方法

泛型方法就是定义一个方法,这个方法的参数类型可以是不确定的,当调用这个方法时再去确定这个方法参数的类型。

 

 

 

t作为类型参数也是一个占位符在泛型中,例:

 

 

 

 

 

 

       3.泛型解析:

 

 

 

 

 

 在编译器解析泛型的时候会用占位符去表达有几个类型参数比如~1是1个类型参数t,~2是两个类型参数tkey,tvalue,在clr解析运行的时候具体参数类型已经确定,会把占位符替换成具体参数类型

     4.泛型与object:

 

 

 由其他值类型到object,系统会自动装箱,拆箱操作,需要操作堆和栈会对系统性能产生影响,若处理引用类型,必须要进行类型强制转化,也会产生一定的影响,有可能因为类型的强制转化出现错误。

泛型方法效率最高>普通方法>object方法

     5.泛型约束:

定义泛型类时,作为对类型参数的几种类型施加限制,如果尝试使用约束不允许的类型实例化类,则会产生编译时错误,这些限制成为约束.通过where上下文关键字指定约束。

 

 

 where t:类:基类不是是密封的,密封类不能被继承,加约束毫无意义

where t:new()(类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。)

注意:有多个泛型约束时,new()约束一定是在最后,泛型类型不能继承多个基类可以继承多个接口。

基类约束:

 

 

 引用类型约束:

 

 

 值类型约束:

new()约束:

多个泛型约束:

public static void show<t>(t tparameter)

            where t : people, isports, iwork, new()

{

    

}

   6.泛型缓存:

类中的静态类型无论实例化多少次,在内存中只会有一个,静态构造函数只会执行一次,在泛型类中,t类型不同,每个不同的t类型,都会产生一个不同的副本,所以会产生不同的静态属性,不同的静态构造函数

注意:只能为不同的类型缓存一次.泛型缓存比字典缓存效率高。泛型缓存不能主动释放。

 

相关推荐:

深入了解Rust中泛型的使用

目录 楔子 函数中的泛型 结构体中的泛型 枚举中的泛型 方法中的泛型 楔子 所有的编程语言都致力于将重复的任务简单化,并为此提供各种各样的工具。在Rust中,泛型(generics)就是这样一种工具,它是具体类型或其它属性的抽象替代。在编写代码时,我们可以直接描述泛型的行为,以及与其它泛型产生的联系...

ts中泛型、泛型方法、泛型类、泛型接口

什么是泛型呢?我们可以理解为泛型就是在编译期间不确定方法的类型(广泛之意思),在方法调用时,由程序员指定泛型具体指向什么类型。泛型在传统面向对象编程语言中是极为常见的,ts中当然也执行泛型,如果你理解c#或java中的泛型,相信本篇理解起来会很容易。 泛型函数、泛型类、泛型接口。 08_generi...

浅谈.NET中泛型的基本原理

  本片继承前面几篇一贯的特点,浅谈胡侃。   1.NET为什么要引入泛型?   说到.NET泛型,应该都不陌生,毕竟泛型是.NET2.0中就推出的特性,各位博友应该都知道引入泛型的最主要目的是为了解决装箱、拆箱带来的性能损失,说的当然没有错,但是不够“太具体”,确切来讲泛型解决了原先无法避免的容器...

java中泛型替代Map

     java中的Map是键值对的集合,其中键不能重复,而值可以重复。当往Map中插入数据时发现键重复的时候,而值不同时,就会保持原来的键并且用新值覆盖原来的值。因此,如果要向一个键值对中存放键重复的数据时,可以以如下泛型的数据结构方式存放: publicclassKeyAndValue<...

对 Java 中泛型理解

泛型的概念 泛型是一种末知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型 泛型也可以看成是一个变量用来接收数据类型 Ee:Element元素 Tt:Type类型 有无使用泛型的对比 不使用泛型 创建集合对象,不使用泛型 好处:集合不使用泛型,默认的类型就是Object类型,可以存储任意...

Java中泛型区别以及泛型擦除详解

一、引言   复习javac的编译过程中的解语法糖的时候看见了泛型擦除中的举例,网上的资料大多比较散各针对性不一,在此做出自己的一些详细且易懂的总结。   二、泛型简介   泛型是JDK1.5的一项新特性,一种编译器使用的范式,语法糖的一种,能保证类型安全。【注意:继承中,子类泛型数必须不少于父类泛...

">C#中泛型容器Stack

    我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结。     关于c#中Stack<T>泛型容器:     《1》stack,是一种数据结构——栈,是一种操作受到限制的线性表,只能在一端插入和删除,FILO...

c#中泛型

整理一下昨天学习的泛型,有不对的地方欢迎指正: 泛型类 定义一个类,这个类中某些字段的类型不确定,这些类型可以在构造类时确定下来              2.泛型方法 泛型方法就是定义一个方法,这个方法的参数类型可以是不确定的,当调用这个方法时再去确定这个方法参数的类型。       T作为类型参...