我想知道是否有一个聪明的技巧来实现以下代码,而IUseCase<in TInput>
和IUseCase<out TOuput>
没有冲突或模拟这些情况。
public interface IUseCase<in TInput, out TOutput>
{
TOutput Execute(TInput input);
}
public interface IUseCase<in TInput>
{
void Execute(TInput input);
}
public interface IUseCase<out TOutput>
{
TOutput Execute();
}
答案 0 :(得分:1)
似乎你不能声明两个具有相同名称但不同模板约束的通用接口,尽管我在MSDN和C#语言规范中找不到证据。
编译器会发出&#39;已经包含一个定义&#39;如果两种类型仅由协方差修饰符或类型约束不同,则会出错。例如,以下示例也不会编译,尽管泛型类型具有不同的约束:
public interface IFoo<T> where T : class
{
T Bar();
}
public interface IFoo<T> where T : struct
{
void Bar(T x);
}
但如果通用参数的数量不同,则认为类型不同。
所以问题的答案是 - 不,你不能这样做,除非你重命名你的界面。