我想设计一个人的类,在这个类中有Name这个数据成员,它记录人的姓名
人的姓名允许外界知道
请问在下面的两个类中,哪个好或重新给我设计一个?为什么?
类1:
TPerson = class
  Public
Name: string;
  End;类2:
TPerson = class
  Public
     Function GetName: string;
     Procedure SetName(NewName: string);
  Private
Name: string;
  End;
  Function GetName: string;
  Begin
Result := Name;
  End;
  Procedure SetName(NewName: string);
  Begin
 Name := NewName;
  End;
小弟初学,请指点

解决方案 »

  1.   

    TPerson = class
      Private
        FName: string;
      Public
        property Name:string read FName write FName;
    End;
      

  2.   

    TPerson = class
      private
        FName: string;
        procedure SetName(const Value: string);
      public
        property Name:string read FName write SetName;
      end;
    procedure TPerson.SetName(const Value: string);
    begin
      FName := Value;
    end;
      

  3.   

    数据封装
    读写都可以
    Person.name:='fff'
    caption:=Person.name;
      

  4.   

    TPerson = class
      private
        FName: string;
        procedure SetName(const Value: string);
      public
        property Name:string read FName write SetName;
      end;
    procedure TPerson.SetName(const Value: string);
    begin
      if FName<>Value then
        FName := Value;
    end;
      

  5.   

    支持 fz101thoreau(橘子) 的代码。基本上这是Delphi的标准代码了。zhuifeng529 (sjb) 的两个方案都不好类一根本就不能算作类,干脆用record好了。类二是C++/java的做法,效果和fz101thoreau(橘子)的一样,但是不直观。
    比较一下 writeln(person1.Name);和writeln(person1.GetName);
    person1.Name = 'Tom' 和 person1.SetName('Tom');使用存取器进行封装的好处是:提供一个公共的改变对象属性的入口点。可以避免意外的修改一些关键属性。
    比如:
    TPerson person1;
    ...
    person1.Name = 'Tom';
    ...
    * person1.Name = '';
    ...
    writeln(person1.Name);
    如果代码段比较长,可能程序员会忘记带*的那一行,于是在最后打印的时候对结果为''感到很困惑。