C# 模板&x27;d接口冲突
我想知道是否有一个聪明的技巧来实现下面的代码而不与C# 模板&x27;d接口冲突,c#,C#,我想知道是否有一个聪明的技巧来实现下面的代码而不与IUseCase和IUseCase冲突,或者模拟这些情况 public interface IUseCase<in TInput, out TOutput> { TOutput Execute(TInput input); } public interface IUseCase<in TInput> { void Execute(TInput input); } public interface IUseC
IUseCase
和IUseCase
冲突,或者模拟这些情况
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();
}
公共接口IUseCase
{
TOutput执行(TInput输入);
}
公共接口IUseCase
{
无效执行(TInput输入);
}
公共接口IUseCase
{
TOutput Execute();
}
似乎无法声明两个具有相同名称但不同模板约束的通用接口,尽管我无法在MSDN和C语言规范中找到证明
若两种类型仅因协方差修饰符或类型约束不同,编译器将发出“已包含定义”错误。例如,尽管泛型类型具有不同的约束,但以下示例也不会编译:
public interface IFoo<T> where T : class
{
T Bar();
}
public interface IFoo<T> where T : struct
{
void Bar(T x);
}
公共接口IFoo,其中T:class
{
T-Bar();
}
公共接口IFoo,其中T:struct
{
空心钢筋(tx);
}
但如果泛型参数的数量不同,则被视为不同的类型
所以你的问题的答案是-不,你不能这样做,除非你重新命名你的接口。只是问:你确定你在协方差和逆变换的上下文中正确使用了
in
和out
修饰符吗?我正要离开这里。我也算了很多,但希望有人有一个超级巧妙的技巧来模仿它(我最后只是做了一个EmptyInput接口来填充输入。感觉真的很恶心。