Template'd接口冲突

时间:2014-06-27 08:56:39

标签: c#

我想知道是否有一个聪明的技巧来实现以下代码,而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();
}

1 个答案:

答案 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);
}

但如果通用参数的数量不同,则认为类型不同。

所以问题的答案是 - 不,你不能这样做,除非你重命名你的界面。