我有一个不优雅的解决方案来满足我的需要,但我正在寻找一个优雅的解决方案来替换它。
以下代码无法编译,但代表我想做的事情:
interface IWebService
{
}
abstract class BaseClient<T>
{
}
class SpecializedClient : BaseClient<IWebService>
{
}
class ClientHelper<T> where T : BaseClient<*>
{
}
inT
是ClientHelper<T>
任何扩展的类BaseClient
无论传入的模板类型如何。
我发现的不优雅的解决方案是:
class ClientHelper<T, U> where T : BaseClient<U> {}
这变得不优雅的原因是我的项目最终得到了一个类似于:
class MyClass<A, B, C, D, E, F, G> where A : MyBaseClass<B, C, D, E, F, G>
一直到采用单一类型的基类。这仅仅是拥有一个复杂的泛型类继承树的成本,还是有一种更简单的方法来做到这一点,同时保留对模板类型的类型限制?