泛型嵌套
Generics Imbrication
我有这个 3 类 :
TClassA = Class(Tobject);
end;
TClassB = Class(Tobject);
Child: TClassA;
end;
TClassC = Class(Tobject);
Child: TClassB;
end;
现在我需要像这样覆盖这个层次结构:
TMyClassA = Class(TClassA);
end;
TMyClassB = Class(TClassB);
Child: TMyClassA;
end;
TMyClassC = Class(TClassC);
Child: TMyClassB;
end;
如何避免编写第二个层次结构并在第一个层次结构中使用泛型?我想做类似的事情
TClassC<B: TClassB, A: TClassA>
但是我没找到怎么写
我试过类似的方法,但没有用:
TClassA = Class(Tobject)
end;
TClassB<A: TClassA> = Class(Tobject)
Child: A;
end;
TClassC<B: TClassB> = Class(Tobject)
Child: B;
end;
泛型不是解决此任务的好方法。
假设您不想在第二个层次结构中添加第二个 Child
字段,因为您已经从基础 class 中获得了一个字段,您最好引入一个 属性 和 getter 和 setter 将类型从 TClassA
缩小到 TMyClassA
.
TClassA = class
end;
TClassB = class
FChild: TClassA;
property Child: TClassA {getter, setter};
end;
TClassC = class
FChild: TClassB;
property Child: TClassB {getter, setter};
end;
TMyClassA = class(TClassA)
end;
TMyClassB = class(TClassB)
property Child: TMyClassA {getter, setter};
end;
TMyClassC = class(TClassC)
property Child: TMyClassB {getter, setter};
end;
据我所知,您不能将通用 class 作为另一个通用 class 的输入。所以你不能使用 TClassB
作为 TClassC
.
的通用参数
但是,您可以尝试更类似的方法:
TClassA = class(TObject)
end;
TClassB_Base = class(TObject)
end;
TClassB<A: TClassA> = class(TClassB_Base)
Child: A;
end;
TClassC<B: TClassB_Base> = class(TObject)
Child: B;
end;
TMyClassA = class(TClassA)
end;
TMyClassB = class(TClassB<TMyClassA>)
end;
TMyClassC = class(TClassC<TMyClassB>)
end;
我有这个 3 类 :
TClassA = Class(Tobject);
end;
TClassB = Class(Tobject);
Child: TClassA;
end;
TClassC = Class(Tobject);
Child: TClassB;
end;
现在我需要像这样覆盖这个层次结构:
TMyClassA = Class(TClassA);
end;
TMyClassB = Class(TClassB);
Child: TMyClassA;
end;
TMyClassC = Class(TClassC);
Child: TMyClassB;
end;
如何避免编写第二个层次结构并在第一个层次结构中使用泛型?我想做类似的事情
TClassC<B: TClassB, A: TClassA>
但是我没找到怎么写
我试过类似的方法,但没有用:
TClassA = Class(Tobject)
end;
TClassB<A: TClassA> = Class(Tobject)
Child: A;
end;
TClassC<B: TClassB> = Class(Tobject)
Child: B;
end;
泛型不是解决此任务的好方法。
假设您不想在第二个层次结构中添加第二个 Child
字段,因为您已经从基础 class 中获得了一个字段,您最好引入一个 属性 和 getter 和 setter 将类型从 TClassA
缩小到 TMyClassA
.
TClassA = class
end;
TClassB = class
FChild: TClassA;
property Child: TClassA {getter, setter};
end;
TClassC = class
FChild: TClassB;
property Child: TClassB {getter, setter};
end;
TMyClassA = class(TClassA)
end;
TMyClassB = class(TClassB)
property Child: TMyClassA {getter, setter};
end;
TMyClassC = class(TClassC)
property Child: TMyClassB {getter, setter};
end;
据我所知,您不能将通用 class 作为另一个通用 class 的输入。所以你不能使用 TClassB
作为 TClassC
.
但是,您可以尝试更类似的方法:
TClassA = class(TObject)
end;
TClassB_Base = class(TObject)
end;
TClassB<A: TClassA> = class(TClassB_Base)
Child: A;
end;
TClassC<B: TClassB_Base> = class(TObject)
Child: B;
end;
TMyClassA = class(TClassA)
end;
TMyClassB = class(TClassB<TMyClassA>)
end;
TMyClassC = class(TClassC<TMyClassB>)
end;