DELPHI面向对象支持特点--保护级类成员的应用

g雨你友缘j

g雨你友缘j

2016-02-19 21:31

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的DELPHI面向对象支持特点--保护级类成员的应用教程,一起来看看吧!超容易上手~

  今天在CSDN论坛里面游逛,发现这样的一个帖子《刚才看到一位武林高手的几行精妙代码,百思不得其解,希望各位指点》,本着向各大武林高手学习的态度,我看完了整个帖子,发现内容甚为经典,记录于此,作个总结: 

  

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

   type
    TStringGridEx = class(TStringGrid);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    if TStringGridEx(StringGrid1).RowCount 5 then
      TStringGridEx(StringGrid1).DeleteRow(5);
  end;
  ---------------------------------------------------------

  这是要在StringGrid中删除一行的代码。这个问题我搞了2个小时没有搞定,然后就搜帖子,发现这位高人的代码,简直敬佩之情如黄河之水绵绵不绝,运行也通过。但是为啥TStringGridEx = class(TStringGrid);这个东西就可以有DeleteRow()方法呢?它明明也是继承的TStringGrid,和TStringGrid是一样的啊?我头都大了!希望各位指点!

  

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  以上就是楼主提问内容,问题的确奇怪,经过各大掌门的讨论得出了一个DELPHI特有的保护级成员的应用特点,这应该也是DELPHI独有的一个面向对象支持特点,总结如下:

  

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  1.TForm里面可以访问到TStringGridEx的protected成员,因为它们定义在同一个单元里面
  2.TForm里面不能访问到TStringGrid的protected成员,因为他们不是定义在同一个单元里面
  3.由于TStringGridEx = class(TStringGrid),所以在这里访问TStringGridEx的protected成员就相当于访问TStringGrid的protected成员
  4.TStringGridEx只是一个中介,功能没有扩展但是把TStringGrid的作用域引入到这个单元中来了,所以TForm可以访问TStringGrid的protected成员了

  掌门一的看法是DELPHI的PROTECTED和PRIVATE成员对于同一UNIT里面的各种类和对象都是可见的,而且PROTECTED成员可以在友员子类的UNIT中可见,于是TStringGridEx 哪怕只是继承了TStringGrid没作任何修改,也令TStringGrid中的PROTECTED成员在TStringGridEx的UNIT中可见(这其中还有一个原因是TStringGrid并不是定义在本UNIT,所以只能通过继承使本UNIT成为友员,使TStringGrid的PROTECTED成员开放),问题解决了。我们也从中可以一窥DELPHI的面向对象特点。 掌门二的评论:在同一个单元定义的两个类甚至可以互相访问对方的private成员
  虽然方便了开发,但是很能迷惑初学者
  甚至感觉不够严谨

  

  不过反正delphi也风光不再了,凑乎用吧
  掌门三的评论:没有完美的东西啊!只有适合的东西哦!
  掌门四的评论:protected起来的方法一般是隐藏的,所以直接生成该类的实例是不能引用该方法的,但是在delphi中将位于同一个单元的类自动认为是友类,可以访问其protected方法,所以在相应单元中写一个子类的实现就可以看到protected起来的方法了
    个人觉得DELPHI对PROTECTED和PRIVATE在本单元可见的做法既方便了程序员又迷惑了程序员,使得很多以上的例子满奇怪的,当然这也令程序员增加了许多创造发挥技巧的机会,以上例子就是一个巧妙应用技巧的经典范例,不过个人觉得这些机会还是少一点好。无论如何,可读性才应该是程序员真正追求的代码境界,这些奇怪的技巧性代码,如果我使用其他语言一段时间以后再回来看它,可能怎样都无法想到问题的解答。不过既然选择的DELPHI也就选择了它的缺点,这有点像一对相爱的恋人,选择了对方也就等于选择了他的优点和缺点,世上本没有完美的东西,我们只能适应不完美,追求完美。

  


展开更多 50%)
分享

猜你喜欢

DELPHI面向对象支持特点--保护级类成员的应用

编程语言 网络编程
DELPHI面向对象支持特点--保护级类成员的应用

Delphi面向对象的编程方法

编程语言 网络编程
Delphi面向对象的编程方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi面向对象的编程方法(一)

Delphi
Delphi面向对象的编程方法(一)

Delphi面向对象的编程方法(三)

Delphi
Delphi面向对象的编程方法(三)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Delphi面向对象的编程方法(二)

Delphi
Delphi面向对象的编程方法(二)

Delphi面向对象的编程方法(四)

Delphi
Delphi面向对象的编程方法(四)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Delphi的Hint(2)

Delphi的Hint(2)

用WPS文字复制粘贴和移动文字

用WPS文字复制粘贴和移动文字
下拉加载更多内容 ↓