我还有点困惑泛型的理解,以及它们可用和不可用的情况。
我有一个类TControlMediator,它是泛型的,像这样:
然后我为每个我想要调解的控件类型创建“concret”子类:
到目前为止,一切似乎都正常。但是,当我想要一个TControlMediator后代列表或将TControlMediator作为方法参数时,问题就会出现:
编译器出现致命错误,停止运行:
有人知道这应该如何完成吗?
我有一个类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
有人知道这应该如何完成吗?
TViewMediator<C, T>
? - Craig Stuntz