读<<CLR via C#>>总结(13) 详谈泛型
2012-07-05 17:48
423 查看
1,什么是泛型?
答:泛型是类型的模板,类型是实例(对象)的模板。C#提供了5种泛型:类,接口,委托,结构和方法。
2,使用泛型有什么好处?
答:继承实现的是"代码重用",而泛型实现的是另一种形式的代码重用,即"算法重用"。总结起来有以下优点:
1> 提高代码的可重用性。
2> 编译时的类型安全性。当使用一个不兼容的类型的时候,会在编译时就报错,而不用等到运行时再报错,提高了类型安全性。
3> 更佳的性能。当操作值类型实例的时候,使用泛型会减少值类型的装箱,这样在程序的托管堆上内存分配更少,垃圾回收也没那么频繁,从而能提高程序的性能。
程序输出结果为:
答:泛型是类型的模板,类型是实例(对象)的模板。C#提供了5种泛型:类,接口,委托,结构和方法。
2,使用泛型有什么好处?
答:继承实现的是"代码重用",而泛型实现的是另一种形式的代码重用,即"算法重用"。总结起来有以下优点:
1> 提高代码的可重用性。
2> 编译时的类型安全性。当使用一个不兼容的类型的时候,会在编译时就报错,而不用等到运行时再报错,提高了类型安全性。
3> 更佳的性能。当操作值类型实例的时候,使用泛型会减少值类型的装箱,这样在程序的托管堆上内存分配更少,垃圾回收也没那么频繁,从而能提高程序的性能。
使用泛型类实例
下面是一个使用泛型来实现栈的实例,Main方法定义了两个变量,stackInt和stackString。使用int和string作为类型实参来创建这两个构造类型的实例(对象)。代码如下:namespace GenericDemo1 { //定义一个泛型类 class MyStack<T> { T[] StackArray;//声明数组引用 int StackPointer = 0; const int MaxStack = 10; bool IsStackFull//只读属性 { get { return StackPointer >= MaxStack; } } bool IsStackEmpty { get { return StackPointer <= 0; } } public void Push(T x)//入栈 { if (!IsStackFull)//栈未满 { StackArray[StackPointer++] = x; } } public T Pop()//出栈 { return (!IsStackEmpty)?StackArray[--StackPointer]:StackArray[0]; } public MyStack()//构造函数 { StackArray=new T[MaxStack];//实例化数组对象 } public void Print() { for (int i = StackPointer - 1; i >= 0; i--) { Console.WriteLine("Value: {0}",StackArray[i]); } } } class Program { static void Main(string[] args) { var stackInt = new MyStack<int>();//实例化构造类型,等价于MyStack<int> stackInt=new MyStack<int>(); var stackString = new MyStack<string>(); stackInt.Push(3);//调用Push方法,注意此时类型实参为int stackInt.Push(5); stackInt.Push(7); stackInt.Print(); stackString.Push("A");//调用Push方法,注意此时类型实参为string stackString.Push("B"); stackString.Print(); Console.ReadKey(); } } }
程序输出结果为:
相关文章推荐
- 读<<CLR via C#>>总结(11) 详谈事件
- 读<<CLR via C#>> 详谈泛型
- 读<<CLR via C#>>总结(6) 详谈实例构造器和类型构造器
- 读<<CLR via C#>>总结(10) 详谈委托
- 读<<CLR via C#>>总结(2) 对象创建的原理和两种类型转换方法
- 读<<CLR via C#>>总结(3) 值类型和引用类型的区别
- 读<<CLR via C#>>总结(7) 以传引用的方式向方法传递参数---ref&out
- 读<<CLR via C#>>总结(12) 接口和基类
- 读<<CLR via C#>>总结(5) 如何合理使用类型的可见性和成员的可访问性来定义类
- 读<<CLR via C#>>总结(8) 属性
- 读<<CLR via C#>>总结(1) dotNet平台下源代码是如何生成应用程序的
- 读<<CLR via C#>>总结(9) 索引器(有参属性)
- 读<<CLR via C#>>总结(4) 值类型的装箱和拆箱
- <NET CLR via c# 第4版>笔记 第12章 泛型
- <NET CLR via c# 第4版> 读书笔记--目录
- <NET CLR via c# 第4版>笔记 第15章 枚举类型和位标志
- C# 泛型List<T>学习总结
- <NET CLR via c# 第4版>笔记 第17章 委托
- <NET CLR via c# 第4版>笔记 第10章 属性
- <<Clr Via C#>> Key Points (1) (4-6章)