参数问题1、对象作为参数的问题:
procedure MyProc(a: TObject);
procedure MyProc(var a: TObject);
procedure MyProc(const a: TObject);
对象参数是否有必要写成第二种形式?(引用参数形式)
我记得有些书说第一种调用传入的也是一个地址,而不是把对象的副本传入。
而第二种写法如果是传入一个地址,第一种形式和第二种形式有什么差别? 第三种写法对参数有什么影响呢?
procedure MyProc(a: TObject);
procedure MyProc(var a: TObject);
procedure MyProc(const a: TObject);
对象参数是否有必要写成第二种形式?(引用参数形式)
我记得有些书说第一种调用传入的也是一个地址,而不是把对象的副本传入。
而第二种写法如果是传入一个地址,第一种形式和第二种形式有什么差别? 第三种写法对参数有什么影响呢?
解决方案 »
- Delphi连接Oracle的方法
- 关于表格中画控件的问题。请教大侠!
- 想找Delphi程序员帮我弄个东西!有兴趣的加Q:842972
- Unix标准时间格式 如何转为标准的时间?
- 如何获取网上邻居的密码?
- 版主请进:
- 我想自己用代码控制DetailBand中的分页,然后每页小计,能给个思路吗?
- 我的程序一打开就退出了,救救我吧!!!
- 一个关于Hook的问题,请大家帮帮忙!
- 在哪可以找到有关ISO 层次结构的详细中文资料?
- 看到以前的帖子大家都说按列头排序用SQL.Add('SELECT * FROM 表一 ORDER BY '+Column.FieldName);但我用这句怎么系统说ORDER BY语法错误
- 谁能给我关于DELPHI中使用ADO的编程指南(给40分,在线)
type
TSomeClass = class
SomeField: SomeType;
...
end;
var SomeObj: TSomeClass;SomeObj 其实是个指针!SomeObj.SomeField 其实就是 SomeObj^.SomeField,只不过编译器替你写了“^”,用不着自己写罢了所以
procedure MyProc(a: TMyObject);
也是传的对象的地址(当然,对于那个指针本身,是传值),不会产生副本!对于
var Obj1, Obj2: TMyObject;
procedure MyProc1(a: TMyObject);
begin
a.SomeProp := SomeValue;
a := Obj2;
end;
和
procedure MyProc2(var a: TMyObject);
begin
a.SomeProp := SomeValue;
a := Obj2;
end;
对于 a.SomeProp := SomeValue; 这样的操作,两者结果一样。
对于 a := Obj2; 这样的操作,两者就不同了。
执行 MyProc1(Obj1); 后,Obj1 仍然指向原来的对象
指向 MyProc2(Obj1); 后,Obj1 指向了 Obj2(原来 Obj1 指向的对象仍然存在,但无法通过 Obj1 访问了)const a: TObject 的作用是防止函数内部修改对象而已。
再次强调:这里传递的是对象引用,而不是简单类型。
procedure MyProc(var a: TObject);
好象需要非常严格的对象匹配!我用TObject的子类的对象调用该过程,通不过编译!