【发布时间】:2009-08-04 21:38:22
【问题描述】:
TEnumerable<T>,所有 Generics.Collections 容器类的基类,有一个非常奇怪的声明。它看起来像这样:
type
TEnumerable<T> = class abstract
protected
function DoGetEnumerator: TEnumerator<T>; virtual; abstract;
public
function GetEnumerator: TEnumerator<T>;
end;
function TEnumerable<T>.GetEnumerator: TEnumerator<T>;
begin
Result := DoGetEnumerator;
end;
TEnumerator<T> 同样声明了一个公共的 MoveNext 方法和一个私有的 DoMoveNext 函数,而 MoveNext 除了调用 DoMoveNext 什么都不做。
除了增加额外的函数调用开销、使调用堆栈更长以及在尝试从这些基类继承的编码人员的头脑中造成混乱之外,谁能向我解释它的用途是什么?这种构建它的方式有什么实际优势吗,因为如果有的话我看不到它......
【问题讨论】:
-
它实际上减少了函数调用开销并使调用堆栈更短...... :)
标签: delphi generics data-structures delphi-2009