gpt4 book ai didi

delphi - 降序通用TObjectLIst

转载 作者:行者123 更新时间:2023-12-03 19:43:07 27 4
gpt4 key购买 nike

说我有一个基类:

  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属性的类型为TPart而不是TModulePart(自然)。我不想做:

  TModulePartList = class(TObjectList<TModulePart>)
end;


因为那样我会错过从TPartList中可能拥有的通用方法继承的机会。

有可能吗?

谢谢

最佳答案

您可以这样操作:

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>;

关于delphi - 降序通用TObjectLIst,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com