这是一个单位的最小类  
    TUnit = CLASS(TPersistent)  //单位类  ,单位的最小单位
         private
           FUnitID:INTEGER;   //单位ID
           FUnitName:STRING;  //单位名称
           function  GetUnitID:integer;
           procedure SetUnitID(value:integer);
           function  GetUnitName:string;
           procedure SetUnitName(value:string);
         protected         public
           property  UnitID:integer read GetUnitID  write SetUnitID ;  //单位ID
           property  UnitName:String read GetUnitName write SetUnitName; //单位名称
      end;
下面是一个单位的集合类     TUnitSet = CLASS(TPersistent)  //单位类集
         private
           FUnits:array of TUnit;   //单位集
           function  GetCount:integer;
           function  GetUnit(Index :integer):TUnit;
           procedure SetUnit(Index :integer;value:TUnit);
         protected         public
           property  Count:integer read GetCount ;  //单位个数
           property  Units[Index :integer]:TUnit read GetUnit write SetUnit; //获得一个单位
           function  Add(value:TUnit):integer;  //怎加一个单位,返回单位的总个数
      end;
请问各位大侠,这样写存在什么问题?如何改进?
如果要增加一个单位在  function  Add(value:TUnit):integer; 中医该怎样实现才能保证安全的神情空间存储一个单位类。
谢谢!!!

解决方案 »

  1.   

    如果我没猜错的话,你要的是TCollection和TCollectionItem这两个类。你可以直接从这两个现成类上继承。
      

  2.   

    这样写没什么问题,可以很正常的工作
    但需要考虑Unit类的释放也就是说,FUnits数组中的TUnit类什么时候释放,在调用端释放还是在TUnitSet类中释放。
    这就需要根据你的业务逻辑来考虑了,但建议TUnitSet单元最好还是增加Destroy函数,用来循环
    是否TUnit数组中的unit类实例。
      

  3.   

    FUnits:array of TUnit;   //单位集
    改成 FUnits: TObjectList;function  Add(value:TUnit):integer
    begin
      Result := -1;
      if Assigned(value) then
        Result := FUnits.Add(Value);
    end;