我有這 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;
uj5u.com熱心網友回復:
泛型不是這個任務的好解決方案。
假設您不想要第二Child個層次結構中的第二個欄位,因為您已經從基類中獲得了一個欄位,那么您最好引入一個帶有 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;
uj5u.com熱心網友回復:
AFAIK,您不能使用 Generic 類作為另一個 Generic 類的輸入。因此,您不能將其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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/357951.html
標籤:德尔福
