我有一个不太优雅的解决方案,我需要的,但我正在寻找一个优雅的解决方案来取代它.
以下代码无法编译,但代表了我想要做的事情:
interface IWebService
{
}
abstract class BaseClient<T>
{
}
class SpecializedClient : BaseClient<IWebService>
{
}
class ClientHelper<T> where T : BaseClient<*>
{
}
Run Code Online (Sandbox Code Playgroud)
其中Tin ClientHelper<T>是任何扩展的类,BaseClient无论传入的模板类型如何.
我找到的不优雅的解决方案是:
class ClientHelper<T, U> where T : BaseClient<U> {}
Run Code Online (Sandbox Code Playgroud)
这变得不优雅的原因是我的项目最终得到了类似于以下的类:
class MyClass<A, B, C, D, E, F, G> where A : MyBaseClass<B, C, D, E, F, G>
Run Code Online (Sandbox Code Playgroud)
一直到一个类型的基类.这只是具有泛型类的复杂继承树的成本,还是有更简单的方法来保留模板化类型的类型限制?