2
我想创建一个类或接口,我可以继承,总是利用当前的类实例作为方法的参数...创建泛型类或接口与儿童类自我类型参数
下面是一个例子,解释我的问题:
type IArithmeticObject = interface(IInterface)
procedure assign(ao : IArithmeticObject);
procedure add(ao : IArithmeticObject);
procedure remove(ao : IArithmeticObject);
procedure multiply(ao : IArithmeticObject);
procedure divide(ao : IArithmeticObject);
end;
接口IArithmeticObject
是对子级的出发点,参照基本的算术运算和子类可以被声明为
type TInteger = class(TInterfacedObject, IArithmeticObject)
procedure assign(ao : TInteger);
procedure add(ao : TInteger);
procedure remove(ao : TInteger);
procedure multiply(ao : TInteger);
procedure divide(ao : TInteger);
end;
参数类型为ao
为TInteger
而不是IArithmeticObject
。
另一个想法是使用自引用泛型类型,如:
AMathObject = class;
AMathObject<T : AMathObject, constructor> = class
procedure assign(ao : T);virtual;abstract;
procedure add(ao : T);virtual;abstract;
procedure remove(ao : T);virtual;abstract;
procedure multiply(ao : T);overload;virtual;abstract;
procedure divide(ao : T);virtual;abstract;
end;
,但我无法找出正确的语法...
没有人有这种可能性的任何想法(或不可)?
尽管有效,但它没有什么意义,因为那样你就在API中混合了接口和对象引用。你想使用'IArithmeticObject',但只能将'TInteger'传递给它的方法。因此,如果将“IArithmeticObject ”的方法的参数从“T”更改为“IArithmeticObject ”,那么它会更有意义。 –