专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » ssh中泛型应用:应用泛型 »正文

ssh中泛型应用:应用泛型

来源: 发布时间:星期四, 2009年2月12日 浏览:94次 评论:0


IL和CLR为泛型提供本机支持所以大多数符合CLR语言都可以利用般类型例如下面这段VisualBasic.NET代码使用代码块2般堆栈:
DimstackAsStack(OfInteger)stack=Stack(OfInteger)stack.Push(3)DimnumberAsIntegernumber=stack.Pop
您可以在类和结构中使用泛型以下是个有用般点结构:
publicstructPo{publicTX;publicTY;}
可以使用该般点来表示整数坐标例如:
Popo;po.X=1;po.Y=2;
或者可以使用它来表示要求浮点精度图表坐标:
Popo;po.X=1.2;po.Y=3.4;
除了到目前为止介绍基本泛型语法以外C#2.0还具有些泛型特定语法例如请考虑代码块2Pop思路方法假设您不希望在堆栈为空时引发异常而是希望返回堆栈中存储类型默认值如果您使用基于Object堆栈则可以简单地返回null但是您还可以通过值类型来使用般堆栈为了解决该问题您可以使用default运算符它返回类型默认值
下面介绍说明如何在Pop思路方法实现中使用默认值:
publicTPop{m_StackPoer--;(m_StackPoer>=0){m_Items[m_StackPoer];}{m_StackPoer=0;default(T);}}
引用类型默认值为null而值类型(例如整型、枚举和结构)默认值为全零(用零填充相应结构)因此如果堆栈是用串构建则Pop思路方法在堆栈为空时返回null;如果堆栈是用整数构建则Pop思路方法在堆栈为空时返回零


多个般类型


单个类型可以定义多个般类型参数例如请考虑代码块3中显示般链表
代码块3.般链表
Node{publicKKey;publicTItem;publicNodeNextNode;publicNode{Key=default(K);Item=defualt(T);NextNode=null;}publicNode(Kkey,Titem,NodenextNode){Key=key;Item=item;NextNode=nextNode;}}publicLinkedList{Nodem_Head;publicLinkedList{m_Head=Node;}publicvoidAddHead(Kkey,Titem){NodeNode=Node(key,item,m_Head.NextNode);m_Head.NextNode=Node;}} [Page]
该链表存储节点:
Node{...}
每个节点都包含个键(属于般类型参数K)和个值(属于般类型参数T)每个节点还具有对该列表中下个节点引用链表本身根据般类型参数K和T进行定义:
publicLinkedList{...}
这使该列表可以公开像AddHead般思路方法:
publicvoidAddHead(Kkey,Titem);
每当您声明使用泛型类型变量时都必须指定要使用类型但是指定类型实参本身可以为般类型参数例如该链表具有个名为m_HeadNode类型成员变量用于引用该列表中个项m_Head是使用该列表自己般类型参数K和T声明
Nodem_Head;
您需要在例子化节点时提供类型实参;同样您可以使用该链表自己般类型参数:
publicvoidAddHead(Kkey,Titem){NodeNode=Node<K,T>(key,item,m_Head.NextNode);m_Head.NextNode=Node;}
请注意该列表使用和节点相同名称来表示般类型参数完全是为了提高可读性;它也可以使用其他名称例如:
publicLinkedList{...}
或:
publicLinkedList{...}
在这种情况下将m_Head声明为:
Nodem_Head;
当客户端使用该链表时该客户端必须提供类型实参该客户端可以选择整数作为键并且选择串作为数据项:
LinkedListlist=LinkedList;list.AddHead(123,\"AAA\");
但是该客户端可以选择其他任何组合(例如时间戳)来表示键:


LinkedListlist=LinkedList;list.AddHead(DateTime.Now,\"AAA\");
有时为特定类型特殊组合起别名是有用可以通过using语句完成该操作如代码块4中所示请注意别名作用范围是文件作用范围因此您必须按照和使用using命名空间相同方式在项目文件中反复起别名
代码块4.般类型别名
usingList=LinkedList;ListClient{voidMain(args){Listlist=List;list.AddHead(123,\"AAA\");}}

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: