请问如何强行重载private函数(100分)

  • 主题发起人 主题发起人 hanjy
  • 开始时间 开始时间
H

hanjy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问继承类如何强行重载private函数
 
我也知不可以,但我需要
 
把代码复制下来加在你的新类里。知道不能还需要,只能这么干了
 
没有办法,但不知你的需要是什么,我倒是做过一两次,说给我看,说不定能帮到你。
 
如果是新编控件,要“重载”一个Private的publish,那么,你可以重写该变量的Get函
数Set过程,重新publish该属性,在新的Get函数Set过程中,用
inherited 属性 := ... 来设置该变量值;
... := inherited 属性 来取得该变量值。
如果不是这种需要,请说详细点。
 
可以用一种暴力的方法访问,不过我觉得Private的方法本来就是要隐藏的。
类实例本来是一个指针,指向虚拟方法表。通过试验计算出来指定的私有方法和类实例
指针之间偏移,然后就可以根据这个固定的偏移,和类实例指针取的方法地址,转换为
相应类型就可以执行了。你可以参考System单元的源代码.
 
楼上的办法实在是高,有了算法,一定写成函数公布出来,这样就不存在private了
 
通过指针暴力访问的代码可读性和可移植性太差

我是在编写控件,但要重载的不是一个publish,只是一个private函数,里边访问了一些
private变量(不是publish),我想重载此函数(父类其他函数使用此函数)。
 
如果你想重栽的是VCL的类里的私有函数,我劝你为了其他地方安全还是免了
而换成你自己把它的代码拷贝出来变成你的一个新的保护属性的虚方法,这样你以后继承你
的父类的各个类都可以重载,如果你不需要重载索性在你的父类里把它变成PUBLIC
如果你想重载的本身就是你自己写的类的所有函数,我劝你直接把它升级成保护属性函数
你新的父类直接重载为PUBLIC

 
我记得应该是先继承,再pubic or protect ,然后重载
 
后退
顶部