C#泛型<T>说明
泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。
C#泛型的作用概述
C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。
在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显的好处是--类型安全和减少装箱、拆箱。
在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显的好处是:类型安全和减少装箱、拆箱。
假设我们现在有一个人员集合:创建Person类
public class Person
{
private string name;
private int age;
public Person(string Name, int Age) //构造函数
{
this.age = Age;
this.name = Name;
}
public string Name
{
set { this.name = value; }
get { return name; }
}
public int Age
{
set { this.age = value; }
get { return age; }
}
}
//我们在程序的入口点处运行 以下在集合中增加了一个其他类型的对象,但插入数据的时候并没有报错,编译也可以通过,但把“谁是功夫之王?”这样的字段转换成人员的时候出问题了,这说明ArrayList是类型不安全的。
static void Main(string[] args)
{
ArrayList peoples = new ArrayList();
peoples.Add(new Person("成龙", 18));
peoples.Add(new Person("李小龙", 17));
peoples.Add("谁是功夫之王?");
foreach (Person person in peoples)
{
Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
}
}
//因此在此处中我们创建一个人员的泛型,当要向里面插入其他类型的时候,编译器就会报错
static void Main(string[] args)
{
List< Person> peoples = new List< Person>();
peoples.Add(new Person("成龙", 18));
peoples.Add(new Person("李小龙", 17));
peoples.Add("谁是功夫之王?");
foreach (Person person in peoples)
{
Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
}
}
C#泛型的作用:排序
C#泛型作为一种集合,排序是不可或缺的。排序基于比较同,要排序,首先要比较。一个对象可以有多个比较规则,但只能有一个默认规则,默认规则放在定义该对象的类中。默认规则在CompareTo方法中定义,该方法属于IComparable< T>泛型接口。
public class Person :IComparable< Person>
{
public int CompareTo(Person p) //此处增加一个按年龄排序比较器
{
return this.Age - p.Age;
}
static void Main(string[] args)
{
List< Person> peoples = new List< Person>();
peoples.Add(new Person("陈小龙", 18));
peoples.Add(new Person("李小龙", 17));
peoples.Add(new Person("房小龙", 23));
peoples.Add(new Person("张小龙", 42));
peoples.Sort(); //不带参数的Sort()方法对集合进行排序
foreach (Person person in peoples)
{
Console.WriteLine(person.Name + "今年" + person.Age + "岁。");
}
}
}
C#泛型<T>说明的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- java 泛型
1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
随机推荐
- steam linux 使用socks代理
环境:Ubuntu 15.10 64bit,Steam:built:May 10 2016 需要的工具:ssh/shadowsocks等socks5代理,tsocks ---------------- ...
- window postgresql 10.4安装
window installer下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 其他版本官网下载地址 ...
- 【转载】NonEmpty和Non Empty的区别
转载来源:http://www.ssas-info.com/analysis-services-articles/50-mdx/2196-mdx-non-empty-vs-nonempty One o ...
- 从客户端(ExportContent="...ontinuous <br />Pass Count":13...")中检测到有潜在危险的 Request.Form 值。
mvc中,用chrome浏览器导出excel提示如题错误的解决办法. <system.web> <httpRuntime requestValidationMode="2. ...
- Linux命令大总结
from http://elain.blog.51cto.com/3339379/623310 Linux命令大总结------------------------------------------ ...
- js 动态获取对象多级属性
var obj={ f1:{f2:{f3:2}} } var key="f1.f2.f3" var value=eval("obj."+key); consol ...
- 基于SNMP的交换机入侵的内网渗透
前言:局域网在管理中常常使用SNMP协议来进行设备的管理和监控,而SNMP的弱点也成为了我们此次渗透的关键. 使用SNMP管理设备只需要一个community string,而这个所谓的密码经常采用默 ...
- Linux下自动备份MySQL数据库详细操作步骤(转载)
环境说明操作系统:CentOSIP:192.168.150.214Oracle数据库版本:Oracle11gR2用户:root 密码:123456端口:3306数据库:ts_0.ts_1.ts_2.t ...
- [转载]使用RoboCopy 命令
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...
- js处理日期格式yyyy-MM-dd hh:mm:ss
直接上代码: 使用方法: dateformat('h:m:s') => 09:08:11 dateformat('y-M-d h:m:s') => 2018-06-08 09:08:11 ...