首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

在派生类中定义了跟基类中某虚函数同名的静态函数,但没有重写,结果会怎样?解决方案

2012-04-22 
在派生类中定义了跟基类中某虚函数同名的静态函数,但没有重写,结果会怎样?delphi中,在类中定义了一个静态

在派生类中定义了跟基类中某虚函数同名的静态函数,但没有重写,结果会怎样?
delphi中,
在类中定义了一个静态函数,
但它的父类中存在同名的函数,并且是虚函数,
且类中定义的这个静态函数没有重写,
结果会怎样?



[解决办法]

Delphi(Pascal) code
[Warning] Unit2.pas(16): Method 'test' hides virtual method of base type 'TForm1'
[解决办法]
just have a try!!! and debug the programme by yourself!!!
[解决办法]
呵呵,应该是有冲突吧

[解决办法]
public
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;
[解决办法]
因为你的CreateParams没有被调用到!!!所以被优化了!!!
运行时调用的是TCustomForm的CreateParams!!!
像这种情况还是要加上override!!!
[解决办法]
定义变量名,函数名,过程名
尽量不要与系统自带的“冲突”呀

[解决办法]
取决于你在声明的时候,有没有加修词,比如override
编译时会有提示 :与父类重名,父类方法是虚函数,但这里不是override; 编译是通过的

因为没有加,表示你重新定义了一个方法,与父类方法是2回事(没有任何关系),运行时当然不会调用了

非要往错误的方向走,谁管的了你呢

热点排行