Delphi: una lista genérica de descendientes genéricos y tomando un genérico como parámetro

Lucho un poco con la comprensión de los genéricos y cómo pueden y no pueden usarse.

Tengo una clase genérica de TControlMediator como esta:

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;

Luego hago subclases 'concretas' para cada tipo de control que quiero mediar:

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

Hasta ahora, todo parece funcionar bien. Sin embargo, surgen problemas cuando quiero una lista de descendientes de TControlMediator, o tomar un TControlMediator como un parámetro para un método:

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

El compilador se detiene con errores fatales:

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

¿Alguien tiene alguna pista sobre cómo se supone que se debe hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta