经常见到这样定义一个属性:
private
   Faa: integer;
public
  aa: Integer read Faa write faa;
为什么要这样做呢,直接定义个共有变量不就行了吗?
public
  aa: Integer;
说说有什么区别,最好举个例子什么情况下定义属性,有什么好处

解决方案 »

  1.   

    如果是你说的这种情况下,确实一样。不过如果想用到RTTI,还是有区别的。
    类里的不应该叫变量,而是 field,也就是字段。
      

  2.   

    用属性最大特点是表示出对像的特征来
    比如一个对象->人:
    有年龄,性别,身高...等等属性
    通过read,write方法对它范围进行限定,如:不能超过100岁,或者非男非女,或者身高是10米的...等
    定义为变量问题就来了,范围不限定,这些数据表示出来还是人吗???
      

  3.   

    无聊的人你伤不起
    private
      bb: integer;
    public
      aa: Integer read GetFaa write SetFaa;function ...GetFaa:integer;
    begin
      result :=bb;
    end;procedure ...SetFaa(value :Integer);
    begin
      bb :=value;
    end;
      

  4.   

    属性的好处很多的,,多写几次你就懂了..
    这就是为什么C++ 里面 动不动就用 Get 和 Set 来访问 m_变量.
      

  5.   

    属性是成员函数(set)和过程(get).
      

  6.   

    变量是类之外的
    类里的叫field、域或字段,
    属性是间接了一层:允许加上读写方式限制、通过指定的读写过程进行访问
    如果没任何限制,直接使用field就行了
      

  7.   

    变量是数据的载体,一个对像的特性可以通过属性及方法表现,用属性表示对象更为灵活 
    比如一个人的年龄 
    你可以使用 
    var 
    age: integer; 
    这个变量表示,age := 100。设置这个人有100岁。 
    这样看着没有问题,但age := 1000呢?这样问题就体现出来了。 当你定义一个age属性如下 
    .... 
    property Age: Integer read FAge write SetAge; 你可以在SetAge方法中这样处理 
    procedure SetAge(Value: integer); 
    begin 
    if (Value >= 0) and (value <= 100) then 
    FAge := Value 
    else 
    FAge := 100; 
    end; 
    让年龄的上限就在0~100岁,这样就灵活多了
    (FAge就是成员变量,SetAge是修改FAge变量的方法;属性有Get方法提取数据,Set方法修改数据,在方法里面可以自己定义规则。
      

  8.   

    我来总结一下property的适用范围(当然,在楼主所举例中,因为比较简单,确实看不出必要性)
    1:property最主要的用途是控制对成员的对写。由于你是通过read write来对成员的访问,所以你可以设置成只读,或可读写。另外,由于你可以设置成通过函数来访问成员,所以你能够在函数中添加更多的控制逻辑。2:可以通过一个数组属性 array property来达到对一组成员,或一个数组成员的访问3:property可以在继承中可以被重载override和rewrite。这里的override指的是可以改变stored属性,由父类中不允许被持久化,在子类中改为可以被持久化。rewrite指的是可以在子类中改变read write所指向的函数,从而改变属性的访问。4:property可以在继承树中改变访问域,即,父类中声明在protected的属性,可以在子类中改为public或published,但不改变属性的访问逻辑。5:声明在published部分的属性,可以被编译进RTTI中,从而实现对象的持久化,或运行期动态访问。就像你在IDE中看到的这些VCL对象一样。这个特性,使得Delphi远程对象访问,和控制反转等这些编程技巧得以实现。6:实现接口interface的委托。将对象声明中interface的实现,委托给一个属性。7:其他。:) 小的才疏学浅,未尽之处,还望补充。谢谢!
      

  9.   

    属性 可以是一个对变量复杂的操作
    比如 你定义一个身高的变量 iHeight:Integer; (厘米为单位)哪天需要显示 米为单位
    那么 就可以定义个 属性,对Iheight 变量进行 运算。
     
      

  10.   

    楼主如果看看JAVA的set,get就知道这2者的区别了