是否可以将通用类型约束为两个不同的类?
像这样:
TSomeClass<T: FirstClass; T: SecondClass> = class
// ...
end;
(抱歉没有格式化 - SO工具栏已从我的浏览器中消失)。 我知道上面的内容不会编译,它的编写只是为了给你们一个想法。我试过了
TSomeClass<T: FirstClass, SecondClass> = class
// ...
end;
但后来我不允许写
procedure TSomeClass.SomeMethod<T> (Param1: string);
这甚至可能吗?
答案 0 :(得分:10)
不,这是不可能的。编译器应该如何能够静态验证方法调用是否有效?
注意,
TSomeClass <T : FirstClass, SecondClass>
不是有效的类型约束。您不能组合多个类约束。您可以将类约束与某些接口约束组合在一起。但即便如此
TSomeClass <T : TSomeClass, ISomeInterface>
表示通用类型必须来自TSomeClass
和实现ISomeInterface
。
所以你唯一能做的就是提取FirstClass
和SecondClass
之间常见的东西,把它放在一个接口中并使用一个接口约束:
TSomeClass <T : IOnePointFive>
也许你可以提供一些关于你想要达到的目标的更多细节。
答案 1 :(得分:2)
让两个类实现相同的接口是可行的方法。然后将泛型约束到该接口。