Stack s = new Stack();
s.Push(new Customer());
Customer c = (Customer) s.Pop();
如果将一个值类型(例如一个整数)传递给 Push 方法,运行时会自动将其转换为引用类型(该过程称作装箱),然后将其存储在内部数据结构中。与此类似,如果程序要从堆栈中检索一个值类型(例如一个整数),则需要将从 Pop 方法获取的对象类型显式转换成值类型,该过程称作取消装箱:
Stack s = new Stack();
s.Push(3);
int i = (int) s.Pop();
值类型和引用类型之间的装箱和取消装箱操作非常繁重。
而且,在当前的实现中,无法限制堆栈中放置的数据类型。实际上,可以先创建堆栈,然后将 Customer 类型压入堆栈。然后,可使用同一堆栈并尝试将数据弹出,接着将其转换为其他类型,如下例所示:
Stack s = new Stack();
s.Push(new Customer());
Employee e = (Employee) s.Pop();
尽管上一个代码示例错误地使用了要实现的单个类型 Stack 类,应视为错误,但它实际上却是合法代码,对它进行编译时不会出现问题。但在运行时,该程序会由于无效转换操作而失败。
创建和使用泛型
使用 C# 中的泛型可以根据它们所用的类型创建专供编译器使用的高效数据结构。创建这些所谓的参数化类型后,其内部算法保持不变,但其内部数据的类型可以随着最终用户的设置而改变。
为了帮助开发人员节省学习该语言的时间,C# 中泛型的声明方法与 C++ 中的大致相同。程序员可以按通常的方法创建类和结构,并使用尖括号标记(< 和 >)指定类型参数。使用类时,必须用该类的用户提供的实际类型替换每个参数。
下例将创建一个 Stack 类,在此类声明后的尖括号中指定并声明一个名为 ItemType 的类型参数。泛型 Stack 类的实例将接受为其创建的类型并在本地存储该类型的数据,而不是在创建的类型与基本对象类型之间进行转换。类型参数 ItemType 充当代理,直到在实例化过程中指定了类型并将其用作内部项数组的类型(即 Push 方法的参数类型和 Pop 方法的返回类型):
public class Stack |
閺€鎯版閹存劕濮�閺屻儳婀呴弨鎯版>>
正在阅读:C# 编程语言的未来功能C# 编程语言的未来功能
2009-03-12 23:34
出处:PConline
责任编辑:ycx
键盘也能翻页,试试“← →”键