如何在delphi中实现类函数的泛型化
我有一个基类和从该类派生的10个类。基类包含一个函数,该函数除了对象的如何在delphi中实现类函数的泛型化,delphi,generics,delphi-xe,delphi-xe4,Delphi,Generics,Delphi Xe,Delphi Xe4,我有一个基类和从该类派生的10个类。基类包含一个函数,该函数除了对象的过程类型的参数外。像这样 mytype = procedure (a : integer) of object; baseclass = class public procedure myproc(cont handler : mytype ) ; end; procedure baseclass.myproc(cont handler : mytype ) ; begin // do somethin
过程类型的参数外
。像这样
mytype = procedure (a : integer) of object;
baseclass = class
public
procedure myproc(cont handler : mytype ) ;
end;
procedure baseclass.myproc(cont handler : mytype ) ;
begin
// do something
end;
我在派生类中重载此函数,即派生类包含相同的函数,但具有不同的参数(对象的过程(const handler:integer))。像这样
base1mytype = procedure (a : string) of object;
derivedclass1 = class(baseclass)
public
procedure myproc(cont handler : base1mytype ) ;overload;
end;
base2mytype = procedure (a : boolean) of object;
derivedclass1 = class(baseclass)
public
procedure myproc(cont handler : base2mytype ) ;overload;
end;
等等
我只需要一个实现这个函数的泛型类,然后从这个函数派生我的类
mytype = procedure (a : integer) of object;
baseclass<T> = class
public
procedure myproc(cont handler : T) ;
end;
procedure baseclass<T>.myproc(cont handler : T ) ;
begin
// do something
end;
and derive classes are like this
deriveclass1 = class<baseclass <string>>
public
procedure myproc(cont handler : T) ;
end;
mytype=对象的过程(a:整数);
基类=类
公众的
程序myproc(cont handler:T);
结束;
过程基类.myproc(cont处理程序:T);
开始
//做点什么
结束;
派生类是这样的
deriveclass1=类
公众的
程序myproc(cont handler:T);
结束;
由于泛型约束不支持对象过程的类型约束,因此需要具有内部类型定义的泛型类:
type
TBaseClass<T> = class
public
type
THandler = procedure(Arg: T) of object;
public
procedure CallHandler(Handler: THandler; Arg: T);
end;
procedure TBaseClass<T>.CallHandler(Handler: THandler; Arg: T);
begin
Handler(Arg);
end;
类型
TBaseClass=类
公众的
类型
THandler=对象的过程(Arg:T);
公众的
过程调用处理程序(处理程序:THandler;Arg:T);
结束;
过程TBaseClass.CallHandler(处理程序:THandler;Arg:T);
开始
处理程序(Arg);
结束;
您需要一个具有内部类型定义的泛型类:
type
TBaseClass<T> = class
public
type
THandler = procedure(Arg: T) of object;
public
procedure CallHandler(Handler: THandler; Arg: T);
end;
procedure TBaseClass<T>.CallHandler(Handler: THandler; Arg: T);
begin
Handler(Arg);
end;
类型
TBaseClass=类
公众的
类型
THandler=对象的过程(Arg:T);
公众的
过程调用处理程序(处理程序:THandler;Arg:T);
结束;
过程TBaseClass.CallHandler(处理程序:THandler;Arg:T);
开始
处理程序(Arg);
结束;
您需要一个具有内部类型定义的泛型类:
type
TBaseClass<T> = class
public
type
THandler = procedure(Arg: T) of object;
public
procedure CallHandler(Handler: THandler; Arg: T);
end;
procedure TBaseClass<T>.CallHandler(Handler: THandler; Arg: T);
begin
Handler(Arg);
end;
类型
TBaseClass=类
公众的
类型
THandler=对象的过程(Arg:T);
公众的
过程调用处理程序(处理程序:THandler;Arg:T);
结束;
过程TBaseClass.CallHandler(处理程序:THandler;Arg:T);
开始
处理程序(Arg);
结束;
您需要一个具有内部类型定义的泛型类:
type
TBaseClass<T> = class
public
type
THandler = procedure(Arg: T) of object;
public
procedure CallHandler(Handler: THandler; Arg: T);
end;
procedure TBaseClass<T>.CallHandler(Handler: THandler; Arg: T);
begin
Handler(Arg);
end;
类型
TBaseClass=类
公众的
类型
THandler=对象的过程(Arg:T);
公众的
过程调用处理程序(处理程序:THandler;Arg:T);
结束;
过程TBaseClass.CallHandler(处理程序:THandler;Arg:T);
开始
处理程序(Arg);
结束;
我还没有阅读所有这些内容,但我注意到您的代码不是真正的代码。例如,“cont”不是有效的关键字。请发布真实代码,而不是您在web浏览器中键入的内容。我知道“const”的意思,但它表明你没有从编辑器中复制它,而是徒手将它输入到浏览器中。这经常会引入错误,混淆了真实和真实的问题。我还没有阅读所有这些,但我注意到你的代码不是你真正的代码。例如,“cont”不是有效的关键字。请发布真实代码,而不是您在web浏览器中键入的内容。我知道“const”的意思,但它表明你没有从编辑器中复制它,而是徒手将它输入到浏览器中。这经常会引入错误,混淆了真实和真实的问题。我还没有阅读所有这些,但我注意到你的代码不是你真正的代码。例如,“cont”不是有效的关键字。请发布真实代码,而不是您在web浏览器中键入的内容。我知道“const”的意思,但它表明你没有从编辑器中复制它,而是徒手将它输入到浏览器中。这经常会引入错误,混淆了真实和真实的问题。我还没有阅读所有这些,但我注意到你的代码不是你真正的代码。例如,“cont”不是有效的关键字。请发布真实代码,而不是您在web浏览器中键入的内容。我知道“const”的意思,但它表明你没有从编辑器中复制它,而是徒手将它输入到浏览器中。我不小心按下了“不接受”按钮,非常感谢你的帮助我不小心按下了“不接受”按钮,非常感谢你的帮助我不小心按下了“不接受”按钮,非常感谢你的帮助我不小心按下了“不接受”按钮,非常感谢你的帮助我不小心按下了“不接受”按钮,非常感谢你的帮助