错误从类传递一个泛型类型到另
问题描述:
我使用德尔福2010年错误从类传递一个泛型类型到另
我得到的错误:E2506法在接口部分声明不得使用本地符号参数化类型。
有没有办法完成这项任务?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Rtti;
type
MyFormType<T: TForm> = class
class procedure SpecialOpen(var FormVar: T; Params: array of TValue);
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ShowForm<T1: TForm>(var aForm: T1);
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.ShowForm<T1>(var aForm: T1);
begin
if aForm = nil then
MyFormType<T1>.SpecialOpen(aForm, [Self]) // <-- Error
else
aForm.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowForm<TForm2>(Form2)
end;
{ MyFormType<T> }
class procedure MyFormType<T>.SpecialOpen(var FormVar: T; Params: array of TValue);
var lRttiContext: TRttiContext;
begin
FormVar := lRttiContext.GetType(TClass(T)).GetMethod('Create').Invoke(TClass(T), Params).AsType<T>;
FormVar.Show;
end;
end.
坦克和抱歉,我的英语。
答
这是Delphi 2010中很多泛型bug中的一个。您的代码在XE2中编译。您的选择是寻找可以在2010年运作的解决方法,或者升级。 Delphi XE和XE2确实包含了很多针对泛型编译器bug的修补程序,因此如果您认真思考如何使用泛型,Delphi 2010并不是一个好选择。