我创建一个单独的unit文件名为unit1,我在其中定义一个类,如下:
Type TTudi=class(TObject)
private
FOwner:TComponent;
FDWBH: String;
procedure SetDWBH(const Value: String);
protected
public
Property DWBH:String read FDWBH write SetDWBH; //定义属性
constructor Create;overload;
constructor Create(OWner:TObject);overload;
destructor Destroy;
procedure Add; {增加}
end;
现在我创建一个frm,在其中uses unit1。
我定义 public
Owner:Ttudi;
当我在此界面中执行一些操作时遇到以下问题:
如果我写语句:Owner.add ; //则执行没有问题
而当我写语句:Owner.DWBH:='asdf';//则提示我非法操作,而我把语句改成
Owner :=Ttudi.create(nil);
Owner.DWBH='asdf' //则没有问题。
现在我的问题是:语句 Owner:Ttudi;应该是声明一个Ttudi类的变量,我在没有实例化即Owner :=Ttudi.create(nil);的时候,为什么还可以让Owner.add ; 正常操作?而一旦涉及到类的属性,则必须先 Owner :=Ttudi.create(nil);????????
Type TTudi=class(TObject)
private
FOwner:TComponent;
FDWBH: String;
procedure SetDWBH(const Value: String);
protected
public
Property DWBH:String read FDWBH write SetDWBH; //定义属性
constructor Create;overload;
constructor Create(OWner:TObject);overload;
destructor Destroy;
procedure Add; {增加}
end;
现在我创建一个frm,在其中uses unit1。
我定义 public
Owner:Ttudi;
当我在此界面中执行一些操作时遇到以下问题:
如果我写语句:Owner.add ; //则执行没有问题
而当我写语句:Owner.DWBH:='asdf';//则提示我非法操作,而我把语句改成
Owner :=Ttudi.create(nil);
Owner.DWBH='asdf' //则没有问题。
现在我的问题是:语句 Owner:Ttudi;应该是声明一个Ttudi类的变量,我在没有实例化即Owner :=Ttudi.create(nil);的时候,为什么还可以让Owner.add ; 正常操作?而一旦涉及到类的属性,则必须先 Owner :=Ttudi.create(nil);????????
解决方案 »
- TDBGrid的焦点ceil的值被改变触发了什么消息?
- DLL问题
- Intraweb中如何获得运行Intraweb的计算机的IP地址? 50分
- 救急,高手帮忙,完后立即结帖,在线等待!
- 如何用setupapi实现象devcon中的enable id 、disable id 、status id
- 怎么样具体实现添加属性页
- dbgrid中删除一条记录
- aqGen := TADOQueryLog.Create(AOwner); 与aqGen := TADOQueryLog.Create(self);的区别
- 关于Delphi的MTS编程中的接口函数问题
- 急急急,如何用Query对lookup进行查询?????
- 对象指针或类指针
- 怎么换行写一条sql语句
但是属性必须创建才可以调用
属性必须创建才可以调用,创建后,它所指的地址才有实际意义。这点同于 huifei99(天之痕) 的观点。
Add是过程,但并不意味着,不创建就可以调用;之所以没有出错,可能是因为Add中没有操作属性。如果Add中对属性进行了操作的话,应该会出错。不知是否正确。