delphi中,
在类中定义了一个静态函数,
但它的父类中存在同名的函数,并且是虚函数,
且类中定义的这个静态函数没有重写,
结果会怎样?
在类中定义了一个静态函数,
但它的父类中存在同名的函数,并且是虚函数,
且类中定义的这个静态函数没有重写,
结果会怎样?
解决方案 »
- Delphi版本(5?6?7?还是?)、三层(Corba?Midas?MTS?还是?)
- 怎么改变treeview树形控件的某个节点颜色?请各路大侠帮忙?在线等侯....
- IdTcpServer的exectue事件是线程安全的吗?
- 谁能详细说说 XXX.create()?
- 如何在image控件上显示透明字?高分送.
- DBGridEh的应用,如何动态控制某几个字段(布尔型)在DBGridEh网格中是否显示选定框。
- 散分拉~~~~~~~~~问题很简单!!!
- 也许是一个低级问题
- 如何避免同时运行多个相同程序?初次提问!
- 文件加密,突发奇想
- 谁有DELPHI开发的服务器推送的示例,代码.
- 网络编程方面的问题
这个问题自己测试一下不就OK了……类中定义了一个静态函数,
但它的父类中存在同名的函数,并且是虚函数,
且类中定义的这个静态函数没有重写,
//调用类的静态函数时只执行了本类中静态函数,父类的静态函数不会执行
procedure DoCreate; reintroduce;
//reintroduce去掉编译器的提示:Method 'DoCreate' hides virtual method of base type 'TCustomForm'
{ Public declarations }
procedure TForm1.DoCreate;//基类TCustomForm有同名的虚拟方法DoCreate
begin
inherited;//在没有override的情况下,依然可以调用TCustomForm的DoCreate
ShowMessage('DoCreate')
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('FormCreate')
end;procedure TForm1.Button1Click(Sender: TObject);
begin
DoCreate
end;
运行时调用的是TCustomForm的CreateParams!!!
像这种情况还是要加上override!!!
子类虽然定义了同名行数(未重写),但是根本就没有地方调用这个函数,所以被优化了。
如果子类中的重名函数使用了重写,那么该函数CreateParams就会被其祖先TWinControl的procedure TWinControl.CreateWnd;函数来调用
编译时会有提示 :与父类重名,父类方法是虚函数,但这里不是override; 编译是通过的因为没有加,表示你重新定义了一个方法,与父类方法是2回事(没有任何关系),运行时当然不会调用了非要往错误的方向走,谁管的了你呢
-----------
起因是参照别人的资料使用了TForm的CreateParams函数,然后将函数体的定义部分复制到了TForm的protected下,结果发现编译时被优化掉了。所以才产生了这个帖子。