Delphi:泛型和类型约束

con*_*tor 1 delphi generics constraints class

是否有可能将通用类型约束为两个不同的类?

像这样:

TSomeClass<T: FirstClass; T: SecondClass> = class
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

(抱歉没有格式化 - SO工具栏已从我的浏览器中消失).我知道上面的内容不会编译,它的编写只是为了给你们一个想法.我试过了

TSomeClass<T: FirstClass, SecondClass> = class
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

但后来我不被允许写

procedure TSomeClass.SomeMethod<T> (Param1: string);
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

jpf*_*ius 10

不,这是不可能的.编译器应该如何能够静态验证方法调用是否有效?

注意

TSomeClass <T : FirstClass, SecondClass>
Run Code Online (Sandbox Code Playgroud)

不是有效的类型约束.您不能组合多个类约束.您可以将类约束与某些接口约束组合在一起.但即便如此

TSomeClass <T : TSomeClass, ISomeInterface>
Run Code Online (Sandbox Code Playgroud)

意味着,泛型类型必须来自TSomeClass 实现ISomeInterface.

所以,你唯一可以做的事情是提取的东西,是之间的共同FirstClassSecondClass,把它放在一个界面,可以用一个接口约束:

TSomeClass <T : IOnePointFive>
Run Code Online (Sandbox Code Playgroud)

也许你可以提供一些关于你想要达到的目标的更多细节.