特定のインターフェイスのリストを取得するために、継承するインターフェイスのカスタムリストを宣言しようとしています(IInterfaceListを認識していますが、これは単なる例です)。私はDelphi2007を使用しているので、実際のジェネリックにアクセスできません(残念です)。
簡単な例を次に示します。
ICustomInterfaceList = interface
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
end;
TCustomInterfaceList = class(TInterfacedObject, ICustomInterfaceList)
public
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
end;
ISpecificInterface = interface(IInterface)
end;
ISpecificInterfaceList = interface(ICustomInterfaceList)
function GetFirst: ISpecificInterface;
end;
TSpecificInterfaceList = class(TCustomInterfaceList, ISpecificInterfaceList)
public
function GetFirst: ISpecificInterface;
end;
TSpecificInterfaceListはコンパイルされません:
E2211「GetFirst」の宣言がインターフェース「ISpecificInterfaceList」の宣言と異なります
理論的にはTCustomInterfaceListを使用できると思いますが、使用するたびに「GetFirst」をキャストする必要はありません。私の目標は、基本クラスの動作を継承し、「GetFirst」をラップする特定のクラスを作成することです。
どうすればこれを達成できますか?
ありがとう!
ISpecificInterfaceList
3つのメソッドを定義します。彼らです:
procedure Add(AInterface: IInterface);
function GetFirst: IInterface;
function GetFirst: ISpecificInterface;
2つの関数は同じ名前を共有しているため、コンパイラがどちらがどちらであるかを識別できるようにする必要があります。
メソッド解決句を使用します。
TSpecificInterfaceList = class(TCustomInterfaceList, ISpecificInterfaceList)
public
function GetFirstSpecific: ISpecificInterface;
function ISpecificInterfaceList.GetFirst = GetFirstSpecific;
end;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加