文档介绍:—张朝明
C# 范型
3/27/2018
1
范型概述
泛型(generic)是C#(CLR)的一个新特性。
框架引入了类型参数(type parameters)的概念。
3/27/2018
2
范型问题的陈述
一个代码片断
整型栈类
class IntStack
{
int[] items;
int count;
public void Push(int item) {...}
public int Pop() {...}
}
3/27/2018
3
范型问题的陈述
字符串栈类
class StringStack
{
String [] items;
int count;
public void Push(int item) {...}
public String Pop() {...}
}
3/27/2018
4
范型问题的陈述
分析
1、上面的2个栈类,它内部的算法是相似的或者一致的。
2、如何能做到算法的复用?编写类型特定的数
据结构是一项乏味的、重复性的且易于出错
的任务。而且无法应对未知的数据类型。
3、 Framework 和 ,我们采用
object来进行“范型”。
3/27/2018
5
范型问题的陈述
用object实现的”范型”
class Stack
{
object [] items;
int count;
public void Push(int item) {...}
public object Pop() {...}
}
3/27/2018
6
范型问题的陈述
用object实现的”范型”的分析
1、如果入栈的是值类型数据,会造成值类型
的装箱,出栈时需要拆箱。从而影响了执行
性能。
2、类型强制转换的不安全性,而这种不安全性
出现在运行时。类型强制转换也造成强制类
型转换开销。
3/27/2018
7
范型问题的陈述
用object实现的”范型”的分析
3、例如:将“苹果类”的对象入栈,在出栈的时
候需要进行强制转换,如果不小心压入栈的
是一个“狗类”的对象,这将会出现运行时转
换失败的异常。
4、重要的原则:宁愿在编译时产生错误,也
不要在运行时出错。
3/27/2018
8
范型的优点
初见C#
class stack<T>
{
T [] items;
int count;
public void Push(int item) {...}
public T Pop() {...}
}
3/27/2018
9
范型的优点
范型stack的调用
stack<int> intstack = new stack<int>();
(1);
int num = ();
stack<string> stringstack = new stack<string>();
(“ABC”);
string s = ();
(1); ----- 编译会报错误!
3/27/2018
10