一直做项目做到现在终于是有空翻翻书本学习了,这次我来讲讲泛型,说到泛型,我们借此要简单讲讲Object类型。
一、Object类型与泛型的联系
Object类型,基本接触过编程的都知道我们所有的类都是继承于这个类,也就是说他是所有类的爸爸,它可以引用任何的类,怎么引用,例如这样
class Objectson
{
Object obj = new ManagementPath();// ManagementPath()来自System.Management
int i=new ManagementPath();//这里就会报出错误:无法将类型"System.Management.ManagementPath"隐式转换成为"int"
}
那这跟我们要说的泛型有什么联系呢,我们举个例子来讲讲,我们创建一个Object类型的数组,这样我们的数组就能装载各种类型的数据如下
static void Main(string[] args)
{
int i = 1; //int类型
double d = 2.0;//double类型
float f = 3;//float类型
char c = 'c';//char类型
string s = "你好"; //string类型
Object[] data = new object[5] {i,d,f,c,s};//创建个容量为5得object类型数组,并将其逐一装箱
}
现在我们把各种类型的数据装进去这个数组了,这时侯我们要取出来就出现问题了
/****第一,不同类型拆箱都要加上强制类型转换,增加程序员负担****/
int i_in =(int)data[0]; //拆箱成int类型需要加强制类型转换
double d_in = (double)data[1];//拆箱成double类型需要加强制类型转换
/****第二,若类型是自定义类型例如自己创建两个类为Human、Animal,拆箱时使用强制转换类型虽然不会出错,但是运行时会出错,因为这两个类未必能兼容****/
Person person=(Person)data[0]; //假设data[0]是Animal
程序员必须得记住这里面有什么类型,如果不小心犯错,就可能造成运行时错误,泛型的设计宗旨就是为了避免程序员犯这种错误。