泛型的学习

1.什么是泛型

泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个非常重要的新功能。

我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。

2.初步了解泛型

为什么要使用泛型呢?

上面定义了一个ShowType的类,里面定义了三个方法,分别输出参数的值和类型,这三个方法的方法体是差不多的,我们可不可以改为一个方法来实现呢?

.net 1.0时代

在上图中我们将方法的参数改为Object类型,来将三个方法整合,但是这样会对性能造成一定的影响(会多进行一次装箱拆箱的操作),看看使用泛型是怎么解决这个问题的

.net 2.0时代

这是一个泛型方法,它有两个参数,一个是类型参数,一个值参数。泛型方法声明的时候没有指定参数类型,而是推迟到使用方法的时候才指定参数类型(延迟思想)。类型可以定义多个,在使用的时候类型参数可以不传,IDE自动推算。

在这种情况下使用泛型方法来实现,就减少了装箱拆箱。

3.泛型的用途(泛型方法、泛型类、泛型接口、泛型委托)

泛型方法在上面已经记录了。

泛型类:

泛型接口:

泛型委托:

4.泛型约束

在泛型约束参数必须为值类型时,有一个方法Default(),输出当前值类型的默认值。而且泛型约束是可以叠加的。

此篇是自己学习泛型时所做的笔记,放在博客上留作记录。如果有前辈发现错误,还望指点。谢谢!

原文地址:https://www.cnblogs.com/xiewei123/p/10054437.html

时间: 2024-10-21 05:44:37

泛型的学习的相关文章

【DAY12】第十二天集合&泛型&IO学习笔记

hash:散列 ------------------ Hashset集合内部是通过HashMap进行实现的.使用的是HashMap中key部分. 对象在添加进集合中时,首选会对hashcode进行处理(hashcode右移16位和 自身做异或运算)得到一个经过处理的hash值,然后该值和集合的容量进行 &运算,得到介于0和集合容量值之间一个数字.该数字表示着数组的下标. 也就是该元素应该存放在哪个元素中. Map与Collection -------------- Map与Collection在

Java泛型再学习

泛型是对于数据的一种规范,他限定了类.容器.方法可以接受的参数类型,避免参数类型混乱. 一.基本泛型 泛型最常见的地方就是集合,如: -- ArrayList<String>  表示这个集合中只能存放String类型的元素 -- HashMap<String, Object>  表示这个图中只能存放键为String类型,值为Object类型的元素 特别要注意的时,泛型只存在于编译阶段,在程序运行阶段,我们定义的泛型是并不存在的,这种方案叫“擦除”,示例: 1 public clas

Java泛型通配符学习 —— Java Generic&#39;s Wildcards

Java Generic's wildcards is a mechanism in Java Generics aimed at making it possible to cast a collection of a certain class, e.g A, to a collection of a subclass or superclass of A. This text explains how. 理解:Java的泛型通配符机制旨在实现集合的类型转换.例如集合A,转换为A的子类集合或

C++泛型基础学习

转载http://blog.csdn.net/xinzheng_wang/article/details/6674847 泛型的基本思想:泛型编程(Generic Programming)是一种语言机制,通过它可以实现一个标准的容器库.像类一样,泛型也是一种抽象数据类型,但是泛型不属于面向对象,它是面向对象的补充和发展.在面向对象编程中,当算法与数据类型有关时,面向对象在对算法的抽象描述方面存在一些缺陷.比如对栈的描述:class stack{ push(参数类型)  //入栈算法 pop(参数

泛型委托学习进程

首先先回顾委托的使用过程步骤: 委托使用总结: (1)     委托声明(定义一个函数原型:返回值+参数类型和个数)注:在类的外部--中介(房产中介商) (2)     根据委托定义"具体"的方法------房源   注:在类中定义方法 (3)     创建委托对象,关联"具体方法"---中介商拥有房源  注意:在主函数中操作 第一种方式:使用new初始化.第二种方式:直接给委托变量赋值方法 (4)     通过委托去调用方法(而不是直接调用方法)------中介带

Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型区别的最大原因,后面会介绍).C#泛型在.NET CLR支持为.NET框架引入参数化变量支持.C#泛型更类似C++模板,可以理解,C#泛型实际上可以理解为类的模板类.我们通过代码实例来看C# 2.0泛型解决的问题,首先,我们通过一个没有泛型的迭代器的代码示例说起,代码实现如下: interface

java泛型简单学习

一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("语文"); list.add("数学"); list.add(100); //编译错误 for (int i = 0; i &l

Java泛型知识学习

一.泛型出现的原因 首先,我们先看一个例子,如下: public class ListErr { public static void main(String[] args) { //创建一个只想保存字符串的List集合 List strList = new ArrayList(); strList.add("Hello World"); strList.add("Good Morning"); strList.add("你好"); //&quo

C#泛型的学习

编码: class Program { static void Main(string[] args) { int obj1 = 2; Test<int> test1 = new Test<int>(obj1); Console.WriteLine("int:" + test1.obj); string obj2 = "hello world"; Test<string> test2 = new Test<string>