这篇文章主要来讲讲c#中的泛型,因为泛型在c#中有很重要的位置,对付写出高可读性,高性能的代码有着关键的感化。
一、什么是泛型?
泛型是 2.0 版 C# 语言和大众语言运行库 (CLR) 中的一个非常重要的新成果。
我们在编程措施时,经常会遇到成果非常相似的模块,只是它们措置惩罚惩罚的数据不一样。但我们没有步伐,只能分袂写多个要领来措置惩罚惩罚差此外数据类型。这个时候,那么问题来了,有没有一种步伐,用同一个要领来措置惩罚惩罚传入差别种类型参数的步伐呢?泛型的呈现就是专门来解决这个问题的,可以看出,微软还是很贴心的。
二、为什么要使用泛型?
接下来我们来看一段代码。
public class GenericClass { public void ShowInt(int n) { Console.WriteLine("ShowInt print {0},ShowInt Parament Type Is {1}",n,n.GetType()); } public void ShowDateTime(DateTime dt) { Console.WriteLine("ShowDateTime print {0},ShowDateTime Parament Type Is {1}", dt, dt.GetType()); } public void ShowPeople(People people) { Console.WriteLine("ShowPeople print {0},ShowPeople Parament Type Is {1}", people, people.GetType()); } }
View Code
static void Main(string[] args) { GenericClass generice = new GenericClass(); generice.ShowInt(11); generice.ShowDateTime(DateTime.Now); generice.ShowPeople(new People { Id = 11, Name = "Tom" }); Console.ReadKey(); }
View Code显示功效:
我们可以看出这三个要领,除了传入的参数差别外,其里面实现的成果都是一样的。在1.1版的时候,还没有泛型这个观点,那么怎么办呢。就有人想到了OOP三大特性之一的担任,我们知道,C#语言中,所有类型都源自同一个类型,那就是object。
public class GenericClass { public void ShowObj(object obj) { Console.WriteLine("ShowObj print {0},ShowObj Parament Type Is {1}", obj, obj.GetType()); } } static void Main(string[] args) { Console.WriteLine("*****************object挪用*********************"); generice.ShowObj(11); generice.ShowObj(DateTime.Now); generice.ShowObj(new People { Id = 11, Name = "Tom" }); Console.ReadKey(); }
View Code显示功效:
我们可以看出,目地是到达了。解决了代码的可读性,但是这样又有个欠好的处所了,我们这样做实际上是一个装箱拆箱操纵,会损耗性能。
终于,微软在2.0的时候颁布了泛型。接下来我们用泛型要领来实现该成果。
三、泛型类型参数
在使用泛型要领之前,我们先来了解下有关于泛型的一些常识。
在泛型类型或要领界说中,类型参数是在其实例化泛型类型的一个变量时,客户端指定的特定类型的占位符。 泛型类( GenericList<T>)无法按原样使用,因为它不是真正的类型;它更像是类型的蓝图。 若要使用 GenericList<T>,客户端代码必需通过指定尖括号内的类型参数来声明并实例化结构类型。 此特定类的类型参数可以是编译器可识另外任何类型。 可创建任意数量的结构类型实例,此中每个使用差此外类型参数,如下所示:
GenericList<float> list1 = new GenericList<float>(); GenericList<ExampleClass> list2 = new GenericList<ExampleClass>(); GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();