数据类型是每一个编程人员都要认真研究的知识,这篇文章就来介绍一下菜鸟了解数据类型的“心酸”历程。
从开始接触编程语言就有了数据类型,诸如int、string、boolean、time、float、double……,慢慢地有认识了实体类型,还有就是接下来的各种集合类。不管怎么讲他们都是由object类型向下衍生出来的:
背景:
ArrayList是一个使用起来非常方便的集合类,无需进行修改即可用来存储任何引用或值类型,添加到 ArrayList中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。 强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。
时势造英雄:
就是由于以上数据类型的局限性,造就了泛型这个大英雄,他能够解决其他数据类型无法提供类型参数的问题。
特点:
泛型类( GenericList<T>)不可以像这样使用,因为它实际上并不是一个类型,而更像是一个类型的蓝图。若要使用 GenericList<T>,客户端代码必须通过指定尖括号中的类型参数来声明和实例化构造类型。此特定类的类型参数可以是编译器识别的任何类型。
Demo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
private class ExampleClass { }
static void Main(string[] args)
{
// 声明一个整形数组
GenericList<int> list1 = new GenericList<int>();
list1.Add(333);
// 声明一个字符串数组
GenericList<string> list2 = new GenericList<string>();
list2.Add("HelloWorld");
}
}
// 声明一个泛型类
public class GenericList<T>
{
public void Add(T input) {
Console.WriteLine("您传入的值是:" + input);
}
}
}
这里简单定义了一个泛型类,当我们需要实例化不同类型的对象时,只需要将泛型具体确定下来即可。
效果如下:
由结果可以看出:同一个类,当我们有不同的需要时,改变输入的参数即可实现我们想要的效果。这也就是自己对泛型比较浅显的认识,关于泛型类型参数的约束、泛型类、泛型委托将会在后边的博文章一一介绍,也希望得到大家的关注和指教。