【发布时间】:2012-04-04 03:32:52
【问题描述】:
我有一个不优雅的解决方案来满足我的需求,但我正在寻找一个优雅的解决方案来替代它。
以下代码无法编译,但代表了我想做的事情:
interface IWebService
{
}
abstract class BaseClient<T>
{
}
class SpecializedClient : BaseClient<IWebService>
{
}
class ClientHelper<T> where T : BaseClient<*>
{
}
ClientHelper<T> 中的 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>
一直到采用单一类型的基类。这仅仅是拥有一个复杂的泛型类继承树的成本,还是有一种更简单的方法来做到这一点,同时保留对模板类型的类型限制?
【问题讨论】:
标签: c# generics inheritance