Показать сообщение отдельно
  #4  
Старый 31.08.2022, 09:00
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Чёта я запутался, собственно что я пытаюсь сделать: есть класс и массив его экземпляров
Код:
  TPart = class (TObject)
  private
    FName: string;
    FNeed: Word;
    FDone: Word;
  public
    property Name: string read FName write FName;
    property Need: Word read FNeed write FNeed;
    property Done: Word read FDone write FDone;
  end;

  TPartsArray = array of TPart;
       .............
AllParts: TPartsArray;
есть класс у которого есть свой массив (пока не понятно чего, это собственно и пытаюсь понять)
Код:
  TProduct = class(TObject)
  private
    FName: string;
    function GetPart(const Index: Byte): TProductPart;
    procedure SetPart(const Index: Byte; const Value: TProductPart);
  public
    property Name: string read FName write FName;
    property Part[Index]: TProductPart read GetPart write SetPart;  //<<<????
  end;
       .............
Product: TProduct
нужно чтобы TProductPart указывал на TPart, но при этом содержал другие поля. Первое что приходит в голову:
Код:
  TProductPart = class(TObject)
  private
    FItem: TPart;
    FCount: Byte;
  public
    property Item: TPart read FItem write FItem;
    property Count: Byte read FCount write FCount; //к количесву элементов отношения не имеет
  end;
выглядит не очень, Product.Part[i].Item, по-моему наследование и полиморфизм не для этого придумывали.
Вроде как нужно наследовать
Код:
  TProductPart = class(TPart)
  private
    FCount: Byte;
  public
    property Count: Byte read FCount write FCount;
  end;
непонятно что дальше, допустим
Код:
(Produdct.Part[i] as TPart):= AllPart[k]; //ну или типа того
ну т.е. если я не создаю Produdct.Part[i], то где будет храниться Сount? А если создаю, то выделяется память и все вот это становится бессмысленным.

upd. Пришел в голову вот такой вариант:
Код:
  TProductPart = class(TObject)
  private
    FPart: TPart;
    FCount: Byte;
    function GetName: string; //SetName - по аналогии;
  public
    property Name: string read GetName write SetName;
      // и все остальное так же
    property Count: Byte read FCount write FCount; //к количесву элементов отношения не имеет
  end;
    .....
function TProductPart.GetName: string
begin
  Result:= FPart.Name;
end;
Вроде должно работать, но вот это вот - дублировать каждое свойство с прописыванием для каждого Get\Set. Есть у меня ощущение что все это можно как-то проще и в Delphi давно уже придумано.
Ответить с цитированием