我有一个界面
IMyInterface<T>
和一个班级
TMyClass<T>
现在我希望我只能将类作为类型传递给TMyClass,它也可以实现IMyInterface。
首先我试过
TMyClass<T:IMyInterface<T>>
但正如预期的那样,现在编译器希望我给他一个实现接口的类型,该接口具有实现接口的类本身类型
第二次尝试是
TMyClass<D,T:IMyInterface<D>>
我认为,D将是共享的DataType,TMyInterface和TMyClass都会使用。
因此在声明实现接口的类
之后TMyIntegerClass = class(TInterfacedObject,IMyInterface<Integer>)
声明
GMyClass:TMyClass<Integer,TMyIntegerClass>
编译错误失败:
E2514 Type parameter 'D' must support interface 'IMyInterface<System.Integer>'
任何指针?
答案 0 :(得分:4)
编译在Delphi 10.2.2东京:
def solution(side):
result = (side**2)*(3**(0.5))/4
return round(result,2)
print(solution(6)) # prints 15.59
如果在类的声明中,我使用type
IMyInterface<T> = interface
['{F810B6BC-78F7-4026-BA83-70435150B758}']
end;
TMyClass<D; T: IMyInterface<D>> = class // note the semicolon!
end;
TMyIntegerClass = class(TInterfacedObject, IMyInterface<Integer>)
end;
var
GMyClass: TMyClass<Integer, TMyIntegerClass>;
(逗号!),则<D, T: TSomeType>
和D
都被声明为相同类型的,如函数的参数:
T
参数procedure Blah(D, T: TSomeType);
和D
属于同一类型,即T
。
现在,如果您为TSomeType
传递Integer
,则会收到错误,类似于您获得的错误。编译器需要两个D
参数。
但如果我使用TSomeType
,那么<D; T: TSomeType>
和D
是单独的类型,即T
属于未知类型且{{1}类型为D
。现在,T
不声明为TSomeType
,如果您通过D
则没有错误。