1

基本クラスがあるとしましょう:

  TPart = class
  private   
    FPartId: Integer;
  public
    property PartId: Integer read FPartId write FPartId;
  end;

そして私はこれのための一般的なリストを持っています:

  TPartList = class(TObjectList<TPart>)
  public
    function IndexOfPart(PartId: Integer): Integer;
  end;

さて、TPartから降りると:

  TModulePart = class(TPart)
  private
    FQuantity: Integer;
  public
    property Quantity: Integer read FQuantity write FQuantity;
  end;

TPartListの子孫を作成したいのですが、TModulePartアイテムを返すことができます。これを行う:

  TModulePartList = class(TPartList)
  end;

デフォルトでは、ItemsプロパティはTModulePartではなくTPartタイプであると見なされます(当然)。私はしたくない:

  TModulePartList = class(TObjectList<TModulePart>)
  end;

それは、TPartListにある可能性のある一般的なメソッドからの継承を見逃しているためです。

できますか?

ありがとう

4

1 に答える 1

3

あなたはこのようにあなたがやりたいことをすることができます:

TGenericPartList<T: TPart> = class(TObjectList<T>)
public
  function IndexOfPart(PartId: Integer): Integer;
end;
TPartList = TGenericPartList<TPart>;
TModulePartList = TGenericPartList<TModule>;

次のように設計すると、さらに柔軟性を高めることができます。

TGenericPartList<T: TPart> = class(TObjectList<T>)
public
  function IndexOfPart(PartId: Integer): Integer;
end;
TPartList = TGenericPartList<TPart>;

TGenericModulePartList<T: TModule> = class(TGenericPartList<T>)
  procedure DoSomething(Module: T);
end;
TModulePartList = TGenericModulePartList<TModule>;
于 2012-10-29T10:32:47.577 に答える