3

私は、ジェネリクスの理解と、それらがどのように使用でき、どのように使用できないかについて少し苦労しています。

次のようなジェネリック クラス TControlMediator があります。

TControlMediator<C, T> = class
private
  FMediatedComponent: C;
public
  constructor Create(ComponentToMediate: C);

  function GetValue: T; virtual; abstract;
  procedure SetValue(Value: T); virtual; abstract;

  property MediatedControl: C read FMediatedComponent;
end;

次に、仲介したいコントロールの種類ごとに「concret」サブクラスを作成します。

TEditMediator = class(TControlMediator<TEdit, string>)
public
  function GetValue: string; override;
  procedure SetValue(Value: string); override;
end;

これまでのところ、すべて正常に動作しているようです。ただし、TControlMediator の子孫のリストが必要な場合や、メソッドへのパラメータとして TControlMediator を取得する場合に問題が発生します。

TViewMediator = class
private
  FControlMediators: TList<TControlMEdiator<C, T>>;
public
  procedure registerMediator(AControlMediator: TControlMediator<C, T>);
  procedure unregisterMediator(AControlMediator: TControlMediator<C, T>);
end;

コンパイラは致命的なエラーで停止します。

[DCC Error] mediator.pas(23): E2003 Undeclared identifier: 'C'
[DCC Error] mediator.pas(28): E2007 Constant or type identifier expected

これがどのように行われることになっているのか、誰にも手がかりがありますか?

4

1 に答える 1