title: Why does TEnumerable<T> use pass-through methods?
body: <p><code>TEnumerable&lt;T&gt;</code>, the base class for all the Generics.Collections container classes, has a very strange declaration.  It looks like this:</p>
  
  <pre><code>type
    TEnumerable&lt;T&gt; = class abstract
    protected
      function DoGetEnumerator: TEnumerator&lt;T&gt;; virtual; abstract;
    public
      function GetEnumerator: TEnumerator&lt;T&gt;;
    end;
  
  function TEnumerable&lt;T&gt;.GetEnumerator: TEnumerator&lt;T&gt;;
  begin
    Result := DoGetEnumerator;
  end;
  </code></pre>
  
  <p><code>TEnumerator&lt;T&gt;</code> likewise declares a public MoveNext method and a private DoMoveNext function, and MoveNext does nothing but call DoMoveNext.</p>
  
  <p>Can anyone explain to me just what purpose this serves, aside from adding extra function call overhead, making call stacks longer, and creating confusion in the minds of coders attempting to inherit from these base classes?  Is there any actual advantage to this way of structuring it, because if there is I don't see it...</p>