唯惟VCL--Button研究之三(20分)

  • 主题发起人 zw960122
  • 开始时间
Z

zw960122

Unregistered / Unconfirmed
GUEST, unregistred user!
>>>>>1.
procedure TControl.Click;
begin
if Assigned(FOnClick) then FOnClick(Self);
end;
为什么要这样写, 怎么不写成
if Assigned(OnClick) then OnClick(Self)
或者
if Assigned(OnClick) then Click;
呢?

>>>>>> 2
用Override 重载和用dynamic 或 virtual 重新声明在作用上有什么区别吗?
 
对于1:这体现是一个封装的思想,由于Borland公司是在写VCL类,所以它去测试
该属性字段的实际情况,而不直接用属性值,把它留给用户编码来用!
对于2:是为了在Delphi中实现多态,这在面向对象中是很重要的一种编程思想。用dynamic
做后缀和virtual做后缀都可实现多态性,但是用dynmic会使你的代码空间变小,而virutal则
更多的是出于速度上的考虑,它要比dynamic快一些,但代码会比dynamic多!
 
>>>>1
Archerfl的意思就是没什么区别了, 是这个意思吗我是用户, 我两种方法都可以用了。

>>>>2
切!多态只不过是个词罢了,又不能吃。
你的意思也是没什么区别了?反正都是覆盖祖先的代码。只不过Override更明确罢了。
 
张无忌兄弟:
有几个帖子去签个到。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=736069
http://www.delphibbs.com/delphibbs/dispq.asp?lid=736086
 
1.是的,你上面列举的方法都可通过,但是假如你在自己写类的话,最好用属性事件字段去
测试(但这两者还是有区别的),但假如你坚持,那是你的事!
2.我从来没说过“没有区别”,这是你的想象罢了!我提到的是一个概述的说法,多态在面
向对象编程领域是一个很有用的手段,至于细节,你自己去下本这方面的书,自己深入研究就
是了,简单阐述是说不清的!
 
Anybody has some more aswer?
 
接受答案了.
 
顶部