不好意思,半路跑了 :) 因为我忽然想起我的代码不是这样的!回去看了一下我的代码,
现在重新整理我的问题,简化代码如下(抱歉,长了点):
unit unit2
interface
uses classes,dialogs;
type
TA = class
public
FS: TStringList
//本来FS应该放在private中的,但为了简化程序,暂且放在public中
constructor Create;
destructor Destroy
override;
end;
TB = class
private
FB: TA
//如果不这样声明一个对象,那么根本不能引用TA的FS,我这样做是不是错了?
public
procedure proc_B;
end;
TC = class
private
FC: TA;
public
procedure proc_C;
end;
var
var_s: TStringList
//全局变量
implementation
procedure TC.proc_C;
begin
FC := TA.Create;
FC.FS.Add('c')
//虽然FS可以引用,但它已经和FB.FS完全不同了!
//对FC.FS的操作并不意味着FB.FS也会改变!
FC.Free;
if Assigned(var_s) then
var_s.Add('c')
//但全局变量就不同!当var_s改变item时,所有类中对var_s的引用都会改变!
end;
procedure TB.proc_B;
begin
FB := TA.Create;
FB.FS.Add('b')
//如果先调用proc_C,再调用proc_B,那么会得到两个不同的对象,而它们的FS属性是完全不同的!
FB.Free;
if Assigned(var_s) then
var_s.Add('b')
//如果先调用proc_C,再调用proc_B,那么var_s就会有两个item
end;
constructor TA.Create;
begin
FS := TStringList.Create;
var_s := TStringList.Create;
end;
destructor TB.Destroy;
begin
FS.Free;
var_s.Free;
inherited;
end
我想知道怎样不使用全局变量而达到var_s的效果?