我有一个接口有两个通用参数,但其中一个参数预计由类实现提供。
public interface IA<T, U> { ... }
public class X<T> : IA<T, int> { ... }
public class Y<T> : IA<T, MyClass> { ... }
然而,另一个接口有一个方法,它以IA
的实例作为参数 - 但是,每个实例必须是相同的(同一类可以使用多个X
,但它永远不会使用Y
,反之亦然)。我尝试将其作为通用约束条件,但这样就会出现以下问题:
public interface IB<T, U, V> where U : IA<T, V> {
void MyMethod(U value);
}
public class Z<T> : IB<T, X<T>, int> { ... }
当然,我不想写出参数
V
,因为我不能为其选择一个值。参数U
已经决定了V的值!但是,我不能简单地删除V
,因为那样我就无法编写约束条件。
另一种解决方案是不使用约束条件:
public interface IB<T> {
void MyMethod(IA<T> value);
}
但是这种方法不能确保
IB
的实现只收到一个IA
的实现(即它将能够同时接收X
和Y
,而且它不应该这样做)。
是否有任何方法可以避免在接口
IB
中创建泛型参数V
(在第一种解决方案中),同时仍然互斥地实现IA
?编译器无法推断出V
的类型并允许我只编写class Z<T> : IB<T, X<T>>
吗?或者这种情况没有出现在语言规范中/选择不实现的原因是什么?
IB
应该与接口IA
具有相同的泛型参数。我不明白为什么你需要将X<T>
作为类型传递。你已经足够定义MyMethod(IA<T,U> value)
,它将限制为X
或Y
但不能同时存在。 - Reactgular