C# 泛型的派生类型#

C# 泛型的派生类型#,c#,class,generics,interface,C#,Class,Generics,Interface,我有以下代码 interface IEncryption{} class EncryptionA : IEncryption {} class EncryptionHandler<T> where T: IEncryption{} class EncryptionMenu { public EncryptionMenu(EncryptionHandler<IEncryption> encryption){} } void main() { Encrypti

我有以下代码

interface IEncryption{}
class EncryptionA : IEncryption {}
class EncryptionHandler<T> where T: IEncryption{}
class EncryptionMenu
{
    public EncryptionMenu(EncryptionHandler<IEncryption> encryption){}
}

void main()
{
   EncryptionMenu encryptionMenu = new EncryptionMenu(new EncryptionHandler<EncryptionA>()); // Error
}
interface-encyryption{}
类EncryptionA:encyryption{}
类EncryptionHandler,其中T:encyryption{}
类加密菜单
{
公共加密菜单(EncryptionHandler encryption){}
}
void main()
{
EncryptionMenu EncryptionMenu=new EncryptionMenu(new EncryptionHandler());//错误
}
我明白了

参数类型“EncryptionHandler”不可分配给 参数类型“EncryptionHandler

我不明白为什么它不能转换它,即使EncryptionA实现了EncryptionOption并应该强制转换它。我也试图使EncryptionMenu通用,但它会使相同的错误向上冒泡,并使代码复杂化。

您必须将T标记为out: 类EncryptionHandler,其中T:encyryption{}


关于c#

了解协变。类不能是协变的。