第8节 高级特性编程.pdf

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8 章 高级特性编程 对任何快速应用程序开发环境来说,特性都是必要的。在设计时需要可视化操纵属性来产生界面效果, 简单的数据在这种工作环境下显得不够智能化。在Bjarne Stroustrop 创建C++编程语言时对这一点可能有 所了解,因为通过操作重载可以重定义对象的操作符。这样在C++程序中将对象作为左操作数或右操作数 使用时,将会调用重载操作符方法。但对于设计时环境来说,这是个过于复杂的解决方案。要更好地管理 数据,可以创建通过读写方法进行访问的数据。特性解决了该问题。Visual Basic 可以处理设计时特性,但 程序员无法控制特性读写方法的代码。Delphi 是第一个可以对数据进行直观而一致的读写的程序。 术语特性把所有的东西都联系到了一起。消息和事件与Windows 相联系,方法描述对象的行为,数据 描述对象的状态,而特性则通过称之为特性存取限定符的标记方法对私有数据提供了受限的访问途径。避 免破坏数据是C++作出的承诺之一。Delphi 通过特性存取限定符实现了该承诺。如果类内部的数据使用是 正确的,而且存取限定符限定了私有字段的访问方式,那么数据是不会被破坏的。 本章中,我们将仔细探索特性的方方面面。您将学到怎样编写数组特性、索引特性和虚特性。本章还 将示范如何定义默认特性和存储值。当您学过本章后,将对Delphi 的面向对象程序设计有一个完整的印象。 8.1 声 明 特 性 特性是数据的表示,它们就像是入口一样。通常特性表示私有数据,即Object Pascal 术语中所说的字 段。惯例是以F 前缀命名私有字段,去掉F 后则成为特性名。特性名的权限一般是公有或公开的。通常公 开的特性是为组件保留的。特性声明的一般语法如下。 property PropertyName: DataType read ReadIdentifier write WriteIdentifier; 关键字property 是必须的。PropertyName 通常是特性所表示的字段名去掉F 前缀得到的。这样如果特 性表示用于存储名字的数据,那么私有字段的名字是FName 而特性的名字则为Name 。如果字符串的数据 类型是合适的,那么对于特性和字段来说DataType 都是string 。ReadIdentifier 和WriteIdentifier 可以是字段。 下面是一个类,其中包含了定义正确的名字特性和字段特性。 type TContact = class private FName : String; public property Name : String read FName write FName; end; 当定义TContact 类的实例并对Contact.Name 进行写入,那么实际上修改了字段数据FName 。上面的 例子是对特性的最简单的使用。但与将FName 定义为公有数据元素相比,上面的用法并未对FName 提供 任何额外的控制。 8.1.1 存取限定符 有时将特性解析到数据就足够了。其余情况下,您可能希望控制数据的读写方式。我们来考虑一个 TStrings 类型的特性。假定在联系消息中有电话号码列表,但这些号码并不总是使用。您可能希望对这些 字符串定义惰性的实例。可以编写算法,使之具有如下的惰性实例化逻辑。 On read instantiate and initialize the list of phone numbers. 第8 章 高级特性编程 193 (在读取特性时,实例化并初始化电话号码的列表) 下面的类示范了该用法。 type TContact = class private FName : String; FPhoneNumbers : TStrings; function CreatePhones : TStrings; protected function GetPhoneNumbers : TStrings; procedure SetPhoneNumbers( const Value : TString

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档