Delphi:泛型和类型约束
Posted
技术标签:
【中文标题】Delphi:泛型和类型约束【英文标题】:Delphi: generic and type constraints 【发布时间】:2009-11-12 14:20:15 【问题描述】:是否可以将泛型的类型限制为两个不同的类?
像这样:
TSomeClass<T: FirstClass; T: SecondClass> = class
// ...
end;
(抱歉,缺少格式 - SO 工具栏已从我的浏览器中消失)。 我知道上面不会编译,它只是为了给你们一个想法而写的。我试过了
TSomeClass<T: FirstClass, SecondClass> = class
// ...
end;
但后来我不被允许写作
procedure TSomeClass.SomeMethod<T> (Param1: string);
这可能吗?
【问题讨论】:
只需使用 4 个空格缩进来获取源代码格式...您不需要工具栏来实现它:) 【参考方案1】:不,这是不可能的。编译器应该如何能够静态验证您的方法调用是否有效?
注意,那个
TSomeClass <T : FirstClass, SecondClass>
不是有效的类型约束。您不能组合多个类约束。不过,您可以将类约束与一些接口约束结合起来。但即便如此
TSomeClass <T : TSomeClass, ISomeInterface>
意味着泛型类型必须从TSomeClass
继承并实现ISomeInterface
。
所以你唯一能做的就是提取FirstClass
和SecondClass
之间共有的东西,把它放在一个接口中并使用接口约束:
TSomeClass <T : IOnePointFive>
也许你可以提供更多关于你想要达到的目标的细节。
【讨论】:
感谢粉碎机。对我来说,无论如何,泛型似乎很神奇,所以我不知道编译器能不能捕捉到什么……但是让它们实现相同的接口是一个可以接受的解决方案。实际上,我通过使用类方法解决了我的问题:原来我的类之间的不同是类范围的差异。使用类方法,我不需要类的实例来制作它,因此可以解决它。【参考方案2】:让两个类实现相同的接口是可行的方法。然后将泛型约束到该接口。
【讨论】:
谢谢吉姆。我希望我能接受你和 Smasher 的回答,但我从 Smasher 开始就接受他的回答,而且由于他帖子的详细程度。但是感谢您的努力!以上是关于Delphi:泛型和类型约束的主要内容,如果未能解决你的问题,请参考以下文章
《C#零基础入门之百识百例》(八十二)泛型类型参数Where约束 -- 泛型单例
《C#零基础入门之百识百例》(八十二) 泛型类型参数Where约束 -- 泛型单例