相关疑难解决方法(0)

C#中的通用继承类型限制

我有一个不太优雅的解决方案,我需要的,但我正在寻找一个优雅的解决方案来取代它.

以下代码无法编译,但代表了我想要做的事情:

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)

一直到一个类型的基类.这只是具有泛型类的复杂继承树的成本,还是有更简单的方法来保留模板化类型的类型限制?

c# generics inheritance

7
推荐指数
1
解决办法
2882
查看次数

标签 统计

c# ×1

generics ×1

inheritance ×1