簡體   English   中英

如何在Delphi中實現類函數的泛型

[英]how to do Generic like Implementation of class function in delphi

我有一個基類和從該類派生的10個類。 基類包含一個函數,該函數除了procedure of object類型procedure of object參數外。 像這樣

 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;

由於泛型約束不支持procedure of object類型procedure of object約束

您需要一個具有內部類型定義的泛型類:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM