http://anony3721.blog.163.com/blog/static/51197420107105132120/?ignoreua

 Property
Keyword Defines controlled access to class fields System unit
?.Property Name : Type read Getter|nodefault;
?.Property Name : Type write Setter;
?.Property Name : Type read Getter write Setter;
?.Property Name : Type Index Constant read Getter {default : Constant|nodefault;} {stored : Boolean};
?.Property Name : Type Index Constant write Setter {default : Constant|nodefault;} {stored : Boolean};
?.Property Name : Type Index Constant read Getter write Setter {default : Constant|nodefault;} {stored : Boolean};
?.Property Name[Index : IndexType] : BaseType read Getter {default;}
?.Property Name[Index : IndexType] : BaseType write Setter; {default;}
?.Property Name[Index : IndexType] : BaseType read Getter write Setter; {default;}
.Property Name : Type read Getter implements Interfaces...;
.Property Name; // Redeclared base class property
.Property Name : Type; // Dispinterface only
.Property Name : Type readonly; // Dispinterface only
.Property Name : Type writeonly; // Dispinterface only
Description
The Property keyword defines a controlled access to class fields. 
 
It is an Object Oriented concept that internals of an object should be hidden from the outside. Whilst you can allow fields (data) in a class to be directly externally accessible (by placing in the public or published sections), this is unwise. Instead, Property can be used to define how the data is read and written. 
 
Versions 1, 2 and 3 These basic forms define read, write or read and write access to class fields. The data Type is returned from the field or method called Getter. The data is updated via the Setter field or method. 
 
Note that you must use a different name for the Name and for Getter and Setter. For example: Property Age read fAge write fAge; You would use field names when there is no vetting or retrieval processing required. When using a method to read or write, the read or written value can be a lot simpler than the stored value. The stored value can even be entirely different. 
 
Versions 4, 5 and 6 Using the Index keyword tells Delphi to pass the Constant value as the argument to the Getter and Setter methods. These must be functions that take this constant index value as an argument. 
 
For example: Property Item2 : string Index 2 read ItemGetter; where ItemGetter is defined as : Function ItemGetter(Index : Integer) : string; Default provides run time information for the property. NoDefault does not. Stored is beyond the scope of Delphi Basics. 
 
Versions 7, 8 and 9 This is a generalised version of versions 4,5 and 6. It requests the user to provide the index value for the Getter and Setter methods. 
 
Default allows the Getter and Setter method calls to be replaced as in the following example : myValue := MyClass.Getter(23); can be replaced by : myValue := MyCLass[23]; 
 
Version 10 Allows the implementation of an Interface method to be delegated to a property. Access to the property invokes the interface implementation. 
 
Version 11 By redclaring a parent class property, you can do so in a public or published clause, thereby raising the access rights of the property. 
 
Versions 12, 13 and 14 Are relevant for dispinterfaces, outside the scope of delphi basics.
 
Related commands
Index   Principally defines indexed class data properties
Private   Starts the section of private data and methods in a class
Protected   Starts a section of class private data accesible to sub-classes
Public   Starts an externally accessible section of a class
Published   Starts a published externally accessible section of a class
 
Example code : Illustrating basic and indexed properties
// Full Unit code.
// -----------------------------------------------------------
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
  // Class with Indexed properties
TRectangle = class
private
fArea : LongInt;
fCoords : array[0..3] of Longint;
function GetCoord(Index: Integer): Longint;
procedure SetCoord(Index: Integer; Value: Longint);
public
    Property Area : Longint read fArea;
    Property Left : Longint Index 0 read GetCoord write SetCoord;
    Property Top : Longint Index 1 read GetCoord write SetCoord;

Property Right : Longint Index 2 read GetCoord write SetCoord;
    Property Bottom : Longint Index 3 read GetCoord write SetCoord;
    Property Coords[Index: Integer] : Longint read GetCoord write SetCoord;

constructor Create;
end;

// The form class itself
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// TRectangle property 'Getter' routine
// TRectangle constructor
constructor TRectangle.Create;
begin
  // Give default rectangle coordinates
left := 0;
right := 100;
top := 0;
bottom := 100;
fArea := 100 * 100;
end;

function TRectangle.GetCoord(Index: Integer): Longint;
begin
  // Only allow valid index values
if (Index >= 0) and (Index <= 3)
then Result := fCoords[Index]
else Result := -1;
end;

// TRectangle property 'Setter' routine
procedure TRectangle.SetCoord(Index, Value: Integer);
begin
  // Only allow valid index values
if (Index >= 0) and (Index <= 3)
then
begin
    // Save the new value
fCoords[Index] := Value;

// And recreate the rectangle area
fArea := (right - left) * (bottom - top);
end;
end;

// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
myRect : TRectangle;
i : Integer;

begin
  // Create my little rectangle with default coordinates
myRect := TRectangle.Create;

// And set the corner coordinates
myRect.Left := 22; // Left using direct method
myRect.Top := 33;
myRect.SetCoord(2,44); // Right using indexed method
myRect.SetCoord(3,55);

// And ask for these values
for i:= 0 to 3 do
ShowMessageFmt('myRect coord %d = %d',[i,myRect.GetCoord(i)]);

// And show the rectangle area
ShowMessageFmt('myRect area = %d',[myRect.Area]);
end;

end.

Show full unit code
myRect coord 0 = 22
myRect coord 1 = 33
myRect coord 2 = 44
myRect coord 3 = 55
myRect area = 484

Delphi Property详解的更多相关文章

  1. Delphi 关键字详解

    Delphi 关键字详解[整理于 "橙子" 的帖子] absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var   Str: ];   S ...

  2. Objective-C中的@Property详解

    Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...

  3. Delphi指针详解

    Delphi指针详解2007-12-04 06:08:57|  分类: DLL学习 阅读91 评论0   字号:大中小 订阅 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...

  4. Delphi多线程详解

    (整理自网络) Delphi多线程处理 1-1多线程的基本概念 WIN 98/NT/2000/XP 是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU 运行时间和资源,或者 ...

  5. Delphi 关键字详解[整理于 "橙子" 的帖子]

    absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var   Str: ];   StrLen: Byte absolute Str; //这个声明指定了变量 ...

  6. 【转】Delphi 关键字详解

    absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string[32]; StrLen: Byte absolute Str; //这个声明 ...

  7. Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法

    1. Delphi中的全局函数 //要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses   Window ...

  8. OC中的@property详解

    简介: @property 生成了变量的get set 方法,同时指定了变量名称. 例如@property (nonatomic,strong) NSString *name;表示生成了_name私有 ...

  9. python property详解

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter ...

随机推荐

  1. 设计模式之观察者模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern /** * 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern). * 比 ...

  2. django模板解析 循环列表中 切片和求长度

    {% for subrow in subdic.content|slice:":5" %} {% endfor %} {% if "{{subdic.content|le ...

  3. 如何对POST请求但是URL中也有参数/GET请求但是请求体中也有参数的情况进行安全扫描

    通常情况下,GET的参数都在URL中,POST的参数都在请求体中,但是如题的情况也有,像使用方法PUT.DELETE的情况也有,这些情况该如何进行安全扫描呢?

  4. JPEG编码(二)

    来自CSDN评论区http://bbs.csdn.net/topics/190980 1. 色彩模型 JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色彩模型, ...

  5. CKEditor+SWFUpload实现功能较为强大的编辑器(二)---SWFUpload配置

    在前面配置完CKEditor之后,就可以拥有一个功能挺强大的编辑器了 但是现在还不够,还要能够在发表文字中插入自己电脑上的图片 CKEditor自己好像有这个功能,但是实在是...没法说,很难用(这是 ...

  6. dmz主机就是DNAT功能的体现

    端口映射和DMZ是提供内网和外网映射的,具体各自如下:DMZ:就相当于DNAT(Destination NAT),只对目的IP地址做地址转换.也就是说,收到目的IP为自己WAN口的包,统统转发给内网的 ...

  7. git学习资料及心得

    1. 阮一峰的(简单易懂,实用性佳) http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html http://www.ruanyifeng ...

  8. Javascript 客户端实时显示服务器时间

    <!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  9. C# readonly和const的不同以及它的具体用法

    在C#中,我们用const来定义常量.常量就是我定义一个变量,这个变量的值在整个软件的生命周期都不变.比如我想求一个圆形的面积,我就可以把π定义成一个常量,因为我事先知道圆周率是就是3.1415926 ...

  10. mysql负载飙高原因分析

    某些进程/服务消耗更多CPU资源(服务响应更多请求或存在某些应用瓶颈):发生比较严重的swap(可用物理内存不足):发生比较严重的中断(因为SSD或网络的原因发生中断):磁盘I/O比较慢(会导致CPU ...