我试图分配一个继承自派生类的类,但 C# 编译器不允许我这么做。
这是我想要实现的目标的示例设置。
using System;
namespace ConsoleApp
{
interface IInterfaceA
{
}
interface IInterfaceB
{
}
class TypeA : IInterfaceA
{
}
class TypeB : IInterfaceB
{
}
interface IMapper<in TIn, out TOut>
where TIn : IInterfaceA
where TOut :IInterfaceB
{
TOut MapAToB(TIn input);
}
class AToBMapper : IMapper<TypeA, TypeB>
{
public TypeB MapAToB(TypeA input) => throw new NotImplementedException();
}
class Program
{
static void Main(string[] args)
{
IMapper<IInterfaceA, IInterfaceB> test = new AToBMapper();
}
}
}
一切正常,直到我到达以下行。
IMapper<IInterfaceA, IInterfaceB> test = new AToBMapper();
其中,C# 编译器失败并出现错误,告诉我
Cannot implicitly convert type 'ConsoleApp.AToBMapper' to 'ConsoleApp.IMapper<ConsoleApp.IInterfaceA, ConsoleApp.IInterfaceB>'. An explicit conversion exists (are you missing a cast?)
但是,我似乎无法理解为什么。接口的泛型参数IMapper分别标记为协变和逆变,myAtoBMapper继承自ITypeMapper.
这不应该是可能的吗,因为这TypeA是一个IInterfaceA并且TypeB是一个IInterfaceB ?
牧羊人nacy
紫衣仙女
相关分类