假设我有以下代码:
interface IWidget
{
}
interface IWidgetFactory<TWidget>
where TWidget : IWidget
{
}
TWidgetFactory CreateFactory<TWidgetFactory, TWidget>()
where TWidgetFactory : IWidgetFactory<TWidget>
where TWidget : IWidget
{
return ...
}
每当我调用CreateFactory()
时,我必须传入TWidgetFactory和TWidget类型参数。这似乎是不必要的,因为TWidgetFactory已经有一个约束,因此它的任何特化都必须已经指定了TWidget。有没有什么方法可以在调用CreateFactory()
时自动推断TWidget,即使我必须为它添加某种额外的帮助方法?
(以上是一个简单的例子,但实际上它会变得复杂得多,因此可以节省很多复杂性。)
答案 0 :(得分:2)
如果没有看到CreateFactory
的正文,很难说出你在做什么。根据返回类型,我怀疑CreateFactory
实际上并没有使用TWidget
作为接口的类型参数。在这种情况下,你可以放松一下你的通用约束吗?
interface IWidget
{
}
interface IWidgetFactory {} // A new non-generic base interface
interface IWidgetFactory<TWidget> : IWidgetFactory
where TWidget : IWidget
{
}
// Generic constraints wind up not as specific,
// but still provide some level of restriction
// TWidget can no longer be used within this method.
TWidgetFactory CreateFactory<TWidgetFactory>()
where TWidgetFactory : IWidgetFactory
{
return ...
}