type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; private {Private declarations} public {Public declarations} end;
var Form1: TForm1;
type TArrayInt = array of Integer; TArrayStr = array of string;
//这2个函数一样的内容,只不过参数不一样,内容都一样的,如何合并成1个呢? procedure Analyze(AStr: string; var AStruct: TArrayInt); overload; procedure Analyze(AStr: string; var AStruct: TArrayStr); overload;
implementation
{$R *.dfm}
procedure Analyze(AStr: string; var AStruct: TArrayInt); overload; var I: Integer; begin for I := 0 to 100 do begin Form1.Caption := I.ToString; end; SetLength(AStruct, 10); end;
procedure Analyze(AStr: string; var AStruct: TArrayStr); overload; var I: Integer; begin for I := 0 to 100 do begin Form1.Caption := I.ToString; end; SetLength(AStruct, 10); end;
type TGenericTest = class public class function Print<T>(const A: TArray<T>): string; end;
TMyObject = class end;
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
class function TGenericTest.Print<T>(const A: TArray<T>): string; var i: Integer; val: TValue; obj: TObject; s: string; begin Result := ''; for i := Low(A) to High(A) do begin val := TValue.From(A[i]); //s := val.ToString; //如果是对象,只能显示类名+地址 if val.IsObject then begin obj := val.AsObject; if (obj is TComponent) and (TComponent(obj).Name <> '') then begin s := Format('%s @ %p', [TComponent(obj).Name, Pointer(obj.ClassType)]); end else begin s := val.ToString; end; end else begin s := val.ToString; end; Result := Format('%s'#13#10'%s', [Result, s]); end; Delete(Result, 1, 2); end;