请问泛型的问题

ycongtou 2014-02-06 12:21:56

{链表节点类}
TNode<E> = class(TObject)
private
FElement : E; //当前节点中的元素
FNext : TNode<E>; //当前节点的下一个节点
FPrevious : TNode<E>; //当前节点的上一个节点
published
property Element : E read FElement write FElement;
property Next : TNode<E> read FNext write FNext;
property Previous : TNode<E> read FPrevious write FPrevious;
public
constructor Create; overload;
constructor Create(Next : TNode<E>;Previous : TNode<E>);overload;
constructor Create(element : E;Next : TNode<E>;Previous : TNode<E>);overload;
destructor Destroy; override;
end;

我想写一个双向链表,这是节点类。

{ TNode<E> }

constructor TNode<E>.Create;
begin
inherited;
// 这里怎么写? FElement := ??
FNext := nil;
FPrevious := nil;
end;

constructor TNode<E>.Create(element: E; Next, Previous: TNode<E>);
begin
FElement := element;
FNext := Next;
FPrevious := Previous;
end;

1.这两个重载方法,下面那个 TNode<E>.Create 这儿会有下划线红色显示,提示Overload procedure ‘’ must be marked with............但是编译无错也无警告的。
2.还有,第一个Create方法里FElement那里要怎么写呢?null和nil有什么区别呢?

我知道java中这样都赋为null就可以,delphi请教


private class Node<E>{
E element;
Node<E> next;
Node<E> previous;
public Node(E element, Node<E> next, Node<E> previous) {
super();
this.element = element;
this.next = next;
this.previous = previous;
}
}

...全文
146 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycongtou 2014-02-06
  • 打赏
  • 举报
回复
引用 1 楼 sololie 的回复:
试试 type TNode<E:class> = class // 把 E 类型化 strict private // 题外话:最好加上关键字strict,strict可将私有成员类似c++友元特性无效, // delphi中同个单元内的各个类的private成员实际都是友元的存在 .... constructor TNode<E>.Create; begin FElement := nil; // 就可以赋值nil FNext := nil; FPrevious := nil; end; 你最好直接到generics.collections单元里找一个合适的链表类继承就好了,例如TStack<T>就是一种泛型双向链表。delphi的都有源码,看看generics.collections单元里的那些泛型容器都是怎么写的就好了。 俺都好久没有用d2009以上的版本了,泛型也不是必须的东西,没啥机会弄大工程,也就没法体会泛型对工作效率提高的好处,俺也就用得少都不太熟悉了。 另外delphi中俺只知道variants 单元里有个 Null函数,Null函数返回一个null的variant, 关键字的null就不清楚了,貌似在d6开始null关键字就被废弃了。
嗯好多谢大神指点
sololie 2014-02-06
  • 打赏
  • 举报
回复
试试 type TNode<E:class> = class // 把 E 类型化 strict private // 题外话:最好加上关键字strict,strict可将私有成员类似c++友元特性无效, // delphi中同个单元内的各个类的private成员实际都是友元的存在 .... constructor TNode<E>.Create; begin FElement := nil; // 就可以赋值nil FNext := nil; FPrevious := nil; end; 你最好直接到generics.collections单元里找一个合适的链表类继承就好了,例如TStack<T>就是一种泛型双向链表。delphi的都有源码,看看generics.collections单元里的那些泛型容器都是怎么写的就好了。 俺都好久没有用d2009以上的版本了,泛型也不是必须的东西,没啥机会弄大工程,也就没法体会泛型对工作效率提高的好处,俺也就用得少都不太熟悉了。 另外delphi中俺只知道variants 单元里有个 Null函数,Null函数返回一个null的variant, 关键字的null就不清楚了,貌似在d6开始null关键字就被废弃了。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧