关于C#泛型作用的简单说明

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

C#泛型的作用概述

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

在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显的好处是--类型安全和减少装箱、拆箱。

在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显的好处是:类型安全和减少装箱、拆箱。

假设我们现在有一个人员集合:创建Person类

  1. public class Person
  2. {
  3. private string name;
  4. private int age;
  5. public Person(string Name, int Age) //构造函数
  6. {
  7. this.age = Age;
  8. this.name = Name;
  9. }
  10. public string Name
  11. {
  12. set { this.name = value; }
  13. get { return name; }
  14. }
  15. public int Age
  16. {
  17. set { this.age = value; }
  18. get { return age; }
  19. }
  20. }

//我们在程序的入口点处运行 以下在集合中增加了一个其他类型的对象,但插入数据的时候并没有报错,编译也可以通过,但把“谁是功夫之王?”这样的字段转换成人员的时候出问题了,这说明ArrayList是类型不安全的。

  1. static void Main(string[] args)
  2. {
  3. ArrayList peoples = new ArrayList();
  4. peoples.Add(new Person("成龙", 18));
  5. peoples.Add(new Person("李小龙", 17));
  6. peoples.Add("谁是功夫之王?");
  7. foreach (Person person in peoples)
  8. {
  9. Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
  10. }
  11. }

//因此在此处中我们创建一个人员的泛型,当要向里面插入其他类型的时候,编译器就会报错

  1. static void Main(string[] args)
  2. {
  3. List< Person> peoples = new List< Person>();
  4. peoples.Add(new Person("成龙", 18));
  5. peoples.Add(new Person("李小龙", 17));
  6. peoples.Add("谁是功夫之王?");
  7. foreach (Person person in peoples)
  8. {
  9. Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
  10. }
  11. }

C#泛型的作用:排序

C#泛型作为一种集合,排序是不可或缺的。排序基于比较同,要排序,首先要比较。一个对象可以有多个比较规则,但只能有一个默认规则,默认规则放在定义该对象的类中。默认规则在CompareTo方法中定义,该方法属于IComparable< T>泛型接口。

  1. public class Person :IComparable< Person>
  2. {
  3. 。。。。。。
  4. public int CompareTo(Person p) //此处增加一个按年龄排序比较器
  5. {
  6. return this.Age - p.Age;
  7. }
  8. }
  9. static void Main(string[] args)
  10. {
  11. List< Person> peoples = new List< Person>();
  12. peoples.Add(new Person("陈小龙", 18));
  13. peoples.Add(new Person("李小龙", 17));
  14. peoples.Add(new Person("房小龙", 23));
  15. peoples.Add(new Person("张小龙", 42));
  16. peoples.Sort(); //不带参数的Sort()方法对集合进行排序
  17. foreach (Person person in peoples)
  18. {
  19. Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
  20. }
  21. }

好了,关于C#泛型作用的简单说明就到这里。

时间: 2024-10-15 05:29:07

关于C#泛型作用的简单说明的相关文章

java5核心基础之泛型(3)-泛型作用于编译阶段-如何将String对象传入Integer类型的泛型对象中?

泛型作用于编译阶段: 泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候只能传入指定类型数据到泛型集合对象中去.如何验证呢,贴代码如下: package highBasic.generic; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; public class StringAddToGenericInt

java5核心基础之泛型(3)-泛型作用于编译阶段-怎样将String对象传入Integer类型的泛型对象中?

泛型作用于编译阶段: 泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候仅仅能传入指定类型数据到泛型集合对象中去. 怎样验证呢,贴代码例如以下: package highBasic.generic; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; public class StringAddToGeneri

FTP的搭建与虚拟目录作用&lt;之简单讲解&gt;

操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zqz上的小黑点代表未启动,记得要启动! 6.打开浏览器 7.添加虚拟目录 8. 9.qq添加成功 10. 11.再次添加一个虚拟目录:aa 12. 13. 14.这里我为什么要添加两个虚拟目录呢?一个是qq一个是aa.这就引出了虚拟目录的重要作用. 虚拟目录就是将其他目录以映射的方式虚拟到该FTP服务器的主目录

15泛型_15.2简单泛型

15.2 简单泛型 有许多原因促成了泛型的出现,而最引人往目的一个原因,就是为了创造容器类.容器,就是存放要使用的对象的地方.数组也是如此,不过与简单的数组相比,容器类更加灵活,具备更多不同的功能.事实上,所有的程序,在运行时都要求你持有一大堆对象,所以,容器类算得上最具重用性的类库之一. 我们先来看看一个只能持有单个对象的类.当然了,这个类可以明确指定其持有的对象的类型: //: generics/Holder1.java class Automobile {} public class Ho

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的-如果有写错的地方请大家多多包涵并指正- 今天要复习的是泛型,泛型在Java中也是个很重要的知识点,本文主要讲解基础的概念,并不是高深的知识,如果基础好的同学可以当复习看看- 一.什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常. 泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型 参数化类型

Caffe源码中各种依赖库的作用及简单使用

1.      Boost库:它是一个可移植.跨平台,提供源代码的C++库,作为标准库的后备. 在Caffe中用到的Boost头文件包括: (1).shared_ptr.hpp:智能指针,使用它可以不需要考虑内存释放的问题: (2).date_time/posix_time/posix_time.hpp:时间操作函数: (3).python.hpp:C++/Python互操作: (4).make_shared.hpp:make_shared工厂函数代替new操作符: (5).python/raw

VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用(简单明了)

一. 在字符串前加一个L作用:    如  L"我的字符串"    表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节.   strlen("asd")   =   3;     strlen(L"asd")   =   6; 二.  _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式    如果你定义了UNICODE,那么_T宏会把字符串

linux中mmu作用的简单总结(未完)

linux中mmu的作用: 1.虚实转换 2.控制存储器存取允许 --物理地址不连续,转化成连续的虚拟地址,编程更方便 --可以map memory到0地址用来调试中断服务程序 --系统的某些地址段时不允许被访问的,否则会产生不可预料的后果,为了避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型.启动程序中生成的匹配表中包含地址映射,存储页大小(1M,64K,或4K)以及是否允许存取等信息.

了解泛型数组的简单底层实现

1 有参构造数组函数,A(capacity) 2 无参构造函数,默认容量n 3 获得数组的容量 4 获得数组中元素的个数 5 判断数组是否为空 6 在索引index处插入元素e 7 向所有元素后面/在数组末尾添加一个新元素 8 向所有元素前面/在数组首位添加一个新元素 9 获取index索引未知的元素 10 获得最后一个元素 11 获得第一个元素 12 修改index索引位置的元素为e 13 查找数组中是否有元素e 14 查找数组中元素e所在的索引,存在返回索引,不存在返回-1 15 从数组中删