【问题标题】:Derived type of generics C# [duplicate]派生类型的泛型 C# [重复]
【发布时间】:2015-05-04 14:16:26
【问题描述】:

我有以下代码

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
}

我明白了

“参数类型 'EncryptionHandler' 不可分配给 参数类型'EncryptionHandler'"

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

【问题讨论】:

  • 了解协方差。

标签: c# class generics interface


【解决方案1】:

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

关于 c# co/contravariance

【讨论】:

  • 类不能是协变的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2012-09-08
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多