方法中传参的时候加var和不加var对于非基础数据类型的参数是不是一样的啊我作了个小测试 TBusLineDev = class
private
FDevId: integer;
FLineID: Integer;
end; TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FBuslineDev: TBusLineDev;
FInt: Integer;
procedure F1(BusLineDev: TBusLineDev; IntValue: Integer);
procedure F2(var BusLineDev: TBusLineDev;var IntValue: Integer);
public
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FBuslineDev := TBusLineDev.Create;
FBuslineDev.FDevId := 3;
FBuslineDev.FLineID := 33;
FInt := 333;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FBuslineDev) then
FBuslineDev.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('调用F1,F2前:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
F1(FBuslineDev, FInt);
Memo1.Lines.Add('调用F1后:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
F2(FBusLineDev, FInt);
Memo1.Lines.Add('调用F2后:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
end;procedure TForm1.F1(BusLineDev: TBusLineDev; IntValue: Integer);
begin
BusLineDev.FDevId := 999;
BusLineDev.FLineID := 9999;
IntValue := 99999;
end;procedure TForm1.F2(var BusLineDev: TBusLineDev;var IntValue: Integer);
begin
BusLineDev.FDevId := 888;
BusLineDev.FLineID := 8888;
IntValue := 88888;
end;点击按钮后,Memo中显示如下
调用F1,F2前:
FDevID: 3 FLineID: 33 FInt: 333
调用F1后:
FDevID: 999 FLineID: 9999 FInt: 333
调用F2后:
FDevID: 888 FLineID: 8888 FInt: 88888
private
FDevId: integer;
FLineID: Integer;
end; TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FBuslineDev: TBusLineDev;
FInt: Integer;
procedure F1(BusLineDev: TBusLineDev; IntValue: Integer);
procedure F2(var BusLineDev: TBusLineDev;var IntValue: Integer);
public
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FBuslineDev := TBusLineDev.Create;
FBuslineDev.FDevId := 3;
FBuslineDev.FLineID := 33;
FInt := 333;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FBuslineDev) then
FBuslineDev.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('调用F1,F2前:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
F1(FBuslineDev, FInt);
Memo1.Lines.Add('调用F1后:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
F2(FBusLineDev, FInt);
Memo1.Lines.Add('调用F2后:');
Memo1.Lines.Add('FDevID: ' + IntToStr(FBuslineDev.FDevId) + ' FLineID: ' + IntToStr(FBuslineDev.FLineID) + ' FInt: ' + IntToStr(FInt));
end;procedure TForm1.F1(BusLineDev: TBusLineDev; IntValue: Integer);
begin
BusLineDev.FDevId := 999;
BusLineDev.FLineID := 9999;
IntValue := 99999;
end;procedure TForm1.F2(var BusLineDev: TBusLineDev;var IntValue: Integer);
begin
BusLineDev.FDevId := 888;
BusLineDev.FLineID := 8888;
IntValue := 88888;
end;点击按钮后,Memo中显示如下
调用F1,F2前:
FDevID: 3 FLineID: 33 FInt: 333
调用F1后:
FDevID: 999 FLineID: 9999 FInt: 333
调用F2后:
FDevID: 888 FLineID: 8888 FInt: 88888
你说的是类吧,在参数传递的时候应该只是传递对象的地址,或者说是对象的引用,加不加Var结果应该是一样的.