TEnumerable<T>
是所有泛型集合类的基类,其声明非常奇怪,如下所示:
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
。
除了增加额外的函数调用开销、使调用堆栈更长且让试图从这些基类继承的程序员感到困惑之外,有人能解释一下它的作用吗?如果存在实际优势,请问是什么,因为我没有看到...