Template'd Interfaces Conflicting

本文关键字:Interfaces Conflicting Template | 更新日期: 2023-09-27 18:10:25

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

Template'd Interfaces Conflicting

似乎你不能声明两个具有相同名称但不同模板约束的通用接口,尽管我无法在MSDN和c#语言规范中找到证据。

如果两个类型仅通过协方差修饰符或类型约束不同,编译器会发出'already contains a definition'错误。例如,尽管泛型类型具有不同的约束,但下面的示例也不能编译:

public interface IFoo<T> where T : class
{
  T Bar();
}
public interface IFoo<T> where T : struct
{
  void Bar(T x);
}

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

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