to pazee(耙子) :是这样吗?我怎么记得这是Pascal的一个相对于C++不同的语言特性呢?很多人曾用这个方法来Hacking没有源码又需要访问其私有成员的控件。我认为解释应该是这样的: Object Pascal的继承默认是public的,也就是说父类里private的东东在子类还是private,protected还是protected,public的还是public的,……。这样,在子类里访问父类的成员就象访问自己的成员一样。
to : movingboy(movingboy) pascal中只有在同一个文件的同一个type下声明的类才能访问的private类。 其他情况一样访问不到。这是他help的原话,我试了也的确这么回事儿。 不然他的private和protected就没区别了。
我回忆起Hacking一个Delphi控件的方法了。这是我在Delphi猛料里看到的,不知道是否有帮助:>为什么不能访问Sendor的Color?原因很简单,Color在TControl中是私有的。可以这样解决:TMyControl=Class(TControl);/*在每个需用TControl.Color的单元中写*/procedure ChangeColor(Sender:TObject;iDirection:Integer) begin if iDirection=1 then (Sender as TMyControl).Color:=clAqua else (Sender as TMyControl).Color:=clWindow; end;
他的意思的在同一个模块(same module)的声明的类可以互相访问私有成员可是我自己写的因为在另外一个单元就没办法访问他了,
这不是明摆着不让我继承吗。
Object Pascal的继承默认是public的,也就是说父类里private的东东在子类还是private,protected还是protected,public的还是public的,……。这样,在子类里访问父类的成员就象访问自己的成员一样。
其他情况一样访问不到。这是他help的原话,我试了也的确这么回事儿。
不然他的private和protected就没区别了。
问题:文章:如何跨单元、跨类地访问Delphi类的私有域 ( 积分:100, 回复:3, 阅读:90 )
分类:非技术问题 ( 版主:taozhiyu, luyear )
来自:aimingoo, 时间:2002-1-29 13:55:00, ID:892583 [显示:小字体 | 大字体]
前言:
Delphi约定,一个私有方法不能被其它模块中调用,同时,一个私有属性不能在其它模块中读写。但
Delphi也在同一单元中放宽了上述限制,也就是说,你可以在同一单元的一个类中访问其它类的私有域和
私有方法。
但是,有没有办法不在同一单元访问它们呢?
似乎Delphi不提供这样的机制,但是,我们的确可以做到!全文请阅读:
http://aiming.ynxx.com/files/HowToEnterPrivate.zip其它:
-------------
有关文章在传统媒体上转载的声明请参见网站(http://aiming.ynxx.com/)上的声明。
begin
if iDirection=1 then
(Sender as TMyControl).Color:=clAqua
else
(Sender as TMyControl).Color:=clWindow;
end;
谢谢,这个和我们说的没关系,不是一回事儿。结帖子了。谢谢大家!