IEnumerator<T>インターフェイスから継承しIEnumeratorます。どちらにもGetCurrent()メソッドがあり、そのうちの 1 つは通常のメソッドで、2 つ目はジェネリックTメソッドです。
getCurrent():TObjectしたがって、クラスでは(from IEnumerator) とgetCurrent():T(from )の両方を実装する必要がありますIEnumerator<T>。
1 つの小さな問題は、両方のメソッドが同じパラメーターを持ち、単純に両方を宣言できないことです。したがって、エイリアスを使用する必要があります。
function getCurrentItem() : TElement; //actual method for IEnumerator<T>
function GetCurrent():TObject; //method for IEnumerator
function IMyList.GetCurrent = getCurrentItem; //alias
docwiki http://docwiki.embarcadero.com/RADStudio/en/Implementing_InterfacesのMethod Resolution Clauseを参照してください。
したがって、あなたの場合、コードは次のようになります (私はすべてのメソッドを Abstract とマークしました):
TElement = class(TObject)
end;
IMyList = interface(IEnumerator<TElement>)
procedure Add(Element: TElement);
end;
TMyList = class(TInterfacedObject, IMyList )
private
function getCurrentItem() : TElement; virtual; abstract;
function IMyList.GetCurrent = getCurrentItem;
function GetCurrent():TObject; virtual; abstract;
function MoveNext(): Boolean; virtual; abstract;
procedure Reset(); virtual; abstract;
public
property Current: TElement read GetCurrentItem;
procedure Add(Element: TElement); virtual; abstract;
end;