inherited我一直不是很理解……帮忙看看,很菜的:((88分)

  • 主题发起人 主题发起人 ili
  • 开始时间 开始时间
I

ili

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是程序的片断:
procedure TForm1.FormCreate(Sender: TObject);
var
Reg: TRegistry;
begin
entry:=false;//设定初始值
try
Reg := TRegistry.Create;
try
.......
finally
Reg.CloseKey;
inherited
//这里有什么作用??
end;
finally
Reg.Free;
end;
end;

以下是inherited的help,我查了字典还是看不明白:(还请帮忙解释一下
The reserved word inherited plays a special role in implementing polymorphic behavior. It can occur in method definitions, with or without an identifier after it.
If inherited is followed by a method identifier, it represents a normal method call, except that the search for the method begins with the immediate ancestor of the enclosing method抯 class. For example, when

inherited Create(...);

occurs in the definition of a method, it calls the inherited Create.
When inherited has no identifier after it, it refers to the inherited method with the same name as the enclosing method. In this case, inherited can appear with or without parameters
if no parameters are specified, it passes to the inherited method the same parameters with which the enclosing method was called. For example,

inherited;

occurs frequently in the implementation of constructors. It calls the inherited constructor with the same parameters that were passed to the descendant.
 
这段代码是谁写的?写的够乱的,乱七八糟!
 
你的TForm1是从TForm继承而来的一个类,它有自己的FormCreate过程
而它的父类TForm中也有一个同样名称的方法,此时,TForm1的FormCreate
就会覆盖父类的同名方法。而有的时候我们需要引用父类的方法,这时
就要加上inherited关键字,表示调用的是父类的方法。
而在子类的同名方法中,可以省略父类的方法名称:
inherited;和 inherited FormCreate
是一样的。
通常我们只是想在Form的相关事件中加入一点自己的代码,做一下处理
并不是要全部重来所以应在自己的处理过程中加上inherited调用。
还有,这种
try
...
finally
inherited
end;
的调用形式我认为不太好,
如果上面的“...”中出错,可能调用inherited也会有问题,
不如把它移到try之外:
inherited
try
...
finally
end;
 
To 小人物:
代码我写得不好,请指教,万谢!

To 杜宝:
inherited可以放在Create过程的任何地方么?有没有顺序问题?
还有,我觉得如果不写inherited,Form在Create时仍然是做完所有该做的呀!迷惑……
 
呵呵,第一个问题三两句可讲不清楚:
一般说来,调用inherited的位置不是在流程开始就是在结束(废话!),不是第一句就是
最后一句。和你的自已的代码有关!具体到constructor来说:
如果在你的自处理代码中有引用到子类成员的地方,最好先inherited,以保证成员
都可以正常使用。
如果要有自处理代码中控制创建的过程,或是父类方法的效果,那么inherited在最后,
当然,也不能引用子类的成员了!
第二个问题嘛,比较简单:
你是FormCreate是Form的事件,并不是constructor,TForm的constructor是Create函数!
所以TForm1是能够正常创建的(因为调用了TForm的constructor),而在TForm中的FormCreate
并没有任何的代码,你在TForm1中inherited没有任何的效果!
如果你在TForm1的基础上再继承一个TForm11的话,这个调用就有效果了!
 
多谢杜大哥!其实早就对你的大名如雷贯耳,今日幸能受你指教!
以后还要您多帮助我这种菜鸟呀:) 88分双手全奉上!
 

Similar threads

A
回复
0
查看
981
Andreas Hausladen
A
A
回复
0
查看
933
Andreas Hausladen
A
A
回复
0
查看
806
Andreas Hausladen
A
A
回复
0
查看
964
Andreas Hausladen
A
后退
顶部