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;