为什么要使用泛型
来源:互联网 发布:盘古网络唐山icp备 编辑:程序博客网 时间:2024/05/01 16:44
从开发第一个系统,一直在使用泛型。那么为什么要使用泛型呢?或者说泛型有什么好处。
先来看官方的的解释:
泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。 泛型通常用与集合以及作用于集合的方法一起使用。 .NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic,其中包含几个新的基于泛型的集合类。 建议面向 .NET Framework 2.0 及更高版本的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类如 ArrayList。 有关更多信息,请参见 .NET Framework 类库中的泛型。
首先第一句话,就清晰的告诉大家了,使用泛型就是这么好,重用,类型安全,效率。那么泛型为什么就有这么些好处了呢。
可重用性:
现在我们要返回两个信息,一种是字符串类型的信息,一种是数值类型的信息。
不使用泛型的话我们可以这么做,直接添加两个方法,一个返回字符串,另一个返回数值类型 。
public string getString(string stringMessage) { return stringMessage; } public int getIng(int intMessage) { return intMessage; }
public T getWord<T>(T t) { return t; }
当然了,有些人说了字符串和数值可以相互转换,一个方法也可以,拜托了,这只是个例子,平常使用的话,泛型多用于IList。而且强制转换容易出运行时的问题。好的,问题来了,强制转换,说到强制转换,可以可以说下List,这就说到接下来的泛型的两个优点:类型安全和高效率。
类型安全:
List里面可以添加各种数据类型,它可以说是个异类集合。但是它容易数据类型转换时的运行时错误,也就是说类型不安全。
这得说到List的实现方式了。在List中可以放各种各样的数据类型,不论你push中的元素是什么东东,统统的变为Object类型。而且值类型向Object转换时,还得采取装箱操作,拿出来还得拆箱操作,很容易出现InvalidCastException异常,这有说到了程序员的习惯,对于获取的数据,判null的操作是很必要的。
引用类型向Object的转换应该不用什么消耗资源的操作。毕竟所有的对象都继承Object类型嘛。这一点小编还不太了解呢。这点还望大家都多多指点。
但是如果list中的对象不是某个子类对象的实例,那么强制类型转换就会出现错误,类型安全就会出现问题了。看下面的一段代码,某个程序员一不小心写成了Message类的强制转换。这就出问题了呀
class Program { static void Main(string[] args) { System.Collections.ArrayList list = new System.Collections.ArrayList(); PersonModel person = new PersonModel(); person.Age = 23; person.Name ="张三"; list.Add(person); PersonModel pserson2 = new PersonModel(); if(list[0].GetType() == typeof(PersonModel)){ //某个程序员,一不小心写成了Message类的强制转换 Message message = (Message)list[0]; } Console.WriteLine(pserson2); Console.Read(); } } class PersonModel { string name; public string Name { get { return name; } set { name = value; } } int age; public int Age { get { return age; } set { age = value; } } public override string ToString() { return this.name + "," + this.age; } } class MessageModel { }
而泛型呢,泛型解决了类型转换的根本问题,第一它用不着类型的强制转换。第二泛型集合一旦声明了是何种数据类型的集合,就不再允许其他类型加进去List。最后一旦出现类型转换的错误时,无需运行,编译就通不过。
看下面的使用泛型强制PersonModel的泛型集合,在编译时就提示错误
List<PersonModel> personList = new List<PersonModel>(); personList.Add(person); Message message2 =(Message)personList[0]; //提示错误,类型转换通不过
高效率
最后还有效率的问题。很简单,泛型集合一旦声明了是何种数据类型的集合,就只能添加何种数据类型。添加去也不会转换成Object,它是运行时动态的获取类型参数。也就是说没有装箱和拆箱这些操作。减少了处理器的资源浪费。
总结:泛型是一种思想,也是一种技术,动态的获取参数类型,让编程更加的灵活。那么问题来了,怎么实现动态的获取参数类型呢?毫无疑问,使用反射。
- 为什么要使用泛型
- 为什么要使用泛型
- 为什么使用泛型
- 为什么使用泛型
- Java中为什么要使用泛型?
- 泛型是什么?为什么要使用泛型?
- 泛型是什么?为什么要使用泛型?
- .NET中为什么要使用泛型编程?
- Java泛型系类之一 为什么要使用泛型
- 泛型[0]为什么使用泛型
- 为什么要使用EJB?
- 为什么要使用EJB?
- 为什么要使用JDO
- 为什么要使用EJB
- 为什么要使用EJB?
- 为什么要使用EJB?
- 为什么要使用EJB?
- 为什么要使用Spring
- 排序算法总结
- 文档资源下载网站整理
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 白话解说∑-ΔADC的基本原理
- 利用redis简单实现消息订阅和发布
- 为什么要使用泛型
- jdbc连接数据库步骤(mysql、oracle、sqlserver2008)
- 84.MYSQL数据库安装与配置详解
- Ubuntu16.04安装flash_player插件
- java:‘类’与'对象'的学习
- 再谈子线程-居然可以在非UI线程中更新UI
- leetcode解题之237# Delete Node in a Linked List Java版 (删除链表中指定的结点)
- java中的字节流总结
- 蓝桥杯 集合运算(set)