DELPHI面向对象特点保护级类成员应用

DELPHI面向对象特点保护级类成员应用,第1张

DELPHI面向对象特点保护级类成员应用,第2张

TStringGridEx = class(TStringGrid);

程序TForm1。Button1Click(发件人:to object);
begin
if TStringGridEx(string grid 1)。RowCount > 5,然后
TStringGridEx(string grid 1)。DeleteRow(5);
end;
-

这是在StringGrid中删除一行的代码。这个问题我花了2个小时也没解决,然后搜了一下帖子,找到了这个高手的代码。我简直就像欣赏黄河的水一样欣赏它,它贯穿其中。但是为什么tstringrid ex = class(tstringrid);这个东西可以有DeleteRow()方法?很明显也是继承的TStringGrid,和TStringGrid一样?我头大!希望大家能指出来!

-

以上是楼主提问的内容。问题真的很奇怪。经过领导们的讨论,得出了一个Delphi的保护级成员特有的应用特性,这也应该是DELPHI特有的面向对象的支持特性。可以总结如下:

-

1.可以在tform中访问TStringGridEx的受保护成员,因为它们是在同一个单元
2中定义的。不能在tform中访问tstringrid的受保护成员,因为它们不是在同一个单元
3中定义的。由于tstringrid ex = class (tstringrid),因此,在这里访问TStringGridEx的受保护成员相当于访问TStringGrid
4的受保护成员。TStringGridEx只是一个中介,功能没有扩展,但是TStringGrid的作用域被引入这个单元,所以TForm可以访问TStringGrid的受保护成员。

一种观点是,DELPHI的PROTECTED和PRIVATE成员对同一单元中的各类类和对象可见,PROTECTED成员在friend子类的单元中可见,所以即使TStringGridEx只继承TStringGrid不做任何修改,同样,TStringGrid中的PROTECTED成员在TStringGridEx的单元中可见(另一个原因是该单元中没有定义TStringGrid,所以该单元只能通过继承成为friend,TStringGrid的PROTECTED成员可以打开),问题就解决了。也可以一窥DELPHI面向对象的特点。

- .

但是,反正德尔福的风景已经不一样了。利用一下吧
头三的评论:没有十全十美的东西!只适合的东西!
头四的注释:被保护的方法一般是隐藏的,所以在直接生成这个类的实例时是不能引用的。但是在delphi中,位于同一个单元中的类被自动认为是友类,它的被保护方法是可以访问的,所以在相应的单元中写一个子类的实现就可以看到被保护的方法。

-

我个人认为DELPHI在这个单元中的PROTECTED和PRIVATE的做法,对程序员来说既方便又混乱,使得上面的很多例子很奇怪。当然也增加了很多程序员创造技能的机会。以上例子都是技巧运用娴熟的经典例子,但个人认为还是机会少一点好。无论如何,可读性应该是程序员真正追求的代码境界。如果我用了一段时间其他语言,然后回来看,我可能想不出问题的答案。但是,既然德尔福选择了它的缺点,那就有点像一对相爱的恋人。选择对方就相当于选择了他的优缺点。世界上没有十全十美的东西,我们只能适应不完美,追求完美。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » DELPHI面向对象特点保护级类成员应用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情