【发布时间】:2009-10-27 18:49:03
【问题描述】:
我对泛型的理解以及如何使用和如何使用泛型有点挣扎。
我有一个像这样的通用类 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;
然后,我为每个要调解的控件类型创建“具体”子类:
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
有人知道这应该怎么做吗?
【问题讨论】:
标签: delphi generics delphi-2010