泛型嵌套

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;