Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16495539
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:47:16

下载本文示例代码
p>最近在研究类及类方法时发现一些很有趣的用法,这里挑出两则最有用的与大家分享。   一、访问保护属性   众所周知,delphi的对象有private、protected和public三个级别的访问控制。而delphi有一个奇怪的规则,就是在同一个unit里的对象可以互相访问对方的protected 级别属性!   利用这个特性,我们可以轻松访问任意对象的protected级别属性。虽然这样不是很符合面向对象编程的封装的思想,但有时的确是非常有用的。比如在使用TDBGrid时,我们对如何获得其Row和Col非常头疼,其实在TDBGrid中,Row和Col都是protected级别的属性,我们只要在需要使用这两个属性的unit的interface里声明     TFakeGrid = class(TDBGrid);     然后就可以使用TFakeGrid(ADBGrid).Row和TFakeGrid(ADBGrid).Col 轻松访问了,这个规则对protected里的方法同样适用。   二、类方法的使用类方法(Class methods)是一类特殊的方法,它们在声明时要以class开头     type   TFigure = class   public  ...   class procedure GetInfo(var Info: TFigureInfo); virtual;   ...   end;     实现时也以class开头   class procedure TFigure.GetInfo(var Info: TFigureInfo);   begin   ...   end;   (具体意义请自行查看帮助)      乍一看好象平时没有遇到过这个东东,也没有看到过谁用过这个东东,好象这个东东也没有什么大作用,其实不然……  比如我们有时为输入密码或其他常用数据专门做一个form,但由于其代码都在form定义的unit里面,所以在使用时仅仅需要几行代码,比如   with TfrmPassword.Create(nil) do   try   ShowModal;   finally   Free;   end;     虽然这样的代码已经很简洁,但如果写个十七八个还是很讨厌的。利用类方法可以使其更简洁! 一行足以……   TfrmPassword = class(TForm)   ...   public   { Public declarations }   class f tion Execute: TModalResult;   end;   ...   class function TfrmPassword.Execute: TModalResult;   begin   with TfrmPassword.Create(nil) do   try    Result := ShowModal;   finally   Release; //注意此处必须为release不能为free!   end;   end;   然后只用一行     TfrmPassword.Execute;     即可直接完成调用……是否很爽^_^ p>最近在研究类及类方法时发现一些很有趣的用法,这里挑出两则最有用的与大家分享。   一、访问保护属性   众所周知,delphi的对象有private、protected和public三个级别的访问控制。而delphi有一个奇怪的规则,就是在同一个unit里的对象可以互相访问对方的protected 级别属性!   利用这个特性,我们可以轻松访问任意对象的protected级别属性。虽然这样不是很符合面向对象编程的封装的思想,但有时的确是非常有用的。比如在使用TDBGrid时,我们对如何获得其Row和Col非常头疼,其实在TDBGrid中,Row和Col都是protected级别的属性,我们只要在需要使用这两个属性的unit的interface里声明     TFakeGrid = class(TDBGrid);     然后就可以使用TFakeGrid(ADBGrid).Row和TFakeGrid(ADBGrid).Col 轻松访问了,这个规则对protected里的方法同样适用。   二、类方法的使用类方法(Class methods)是一类特殊的方法,它们在声明时要以class开头     type   TFigure = class   public  ...   class procedure GetInfo(var Info: TFigureInfo); virtual;   ...   end;     实现时也以class开头   class procedure TFigure.GetInfo(var Info: TFigureInfo);   begin   ...   end;   (具体意义请自行查看帮助)      乍一看好象平时没有遇到过这个东东,也没有看到过谁用过这个东东,好象这个东东也没有什么大作用,其实不然……  比如我们有时为输入密码或其他常用数据专门做一个form,但由于其代码都在form定义的unit里面,所以在使用时仅仅需要几行代码,比如   with TfrmPassword.Create(nil) do   try   ShowModal;   finally   Free;   end;     虽然这样的代码已经很简洁,但如果写个十七八个还是很讨厌的。利用类方法可以使其更简洁! 一行足以……   TfrmPassword = class(TForm)   ...   public   { Public declarations }   class f tion Execute: TModalResult;   end;   ...   class function TfrmPassword.Execute: TModalResult;   begin   with TfrmPassword.Create(nil) do   try    Result := ShowModal;   finally   Release; //注意此处必须为release不能为free!   end;   end;   然后只用一行     TfrmPassword.Execute;     即可直接完成调用……是否很爽^_^ 下载本文示例代码


Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则Delphi 小技巧两则
阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~