任何从其他类型参数推断出某些类型参数的方法'c#中的约束
本文关键字:类型参数 约束 方法 推断出 任何 其他 | 更新日期: 2023-09-27 18:17:00
假设我有以下代码:
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,即使我必须为它添加某种额外的辅助方法?
(上面是一个简单的例子,但在实践中可能会变得更加复杂,所以这可以节省很多复杂性。)
没有看到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 ...
}