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();
}
似乎你不能声明两个具有相同名称但不同模板约束的通用接口,尽管我无法在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);
}
但如果泛型形参的数量不同,则认为类型不同。
所以你的问题的答案是-不,你不能这样做,除非你重命名你的接口