如何在c#中实现泛型多态性?

如何在c#中实现泛型多态性?,c#,generics,inheritance,casting,covariance,C#,Generics,Inheritance,Casting,Covariance,为了避免混淆,我总结了一些代码: 命名空间控制台应用程序1 { 班级计划 { 静态void Main() { IManager specificManager=新SpecificEntityManager(); IManager manager=(IManager)specificManager; manager.dostufwith(新的SpecificEntity()); } } 内部接口识别器 { } 内部接口isSpecificEntity:IIdentifier { } 内部类特定实体

为了避免混淆,我总结了一些代码:

命名空间控制台应用程序1
{
班级计划
{
静态void Main()
{
IManager specificManager=新SpecificEntityManager();
IManager manager=(IManager)specificManager;
manager.dostufwith(新的SpecificEntity());
}
}
内部接口识别器
{
}
内部接口isSpecificEntity:IIdentifier
{
}
内部类特定实体:isSpecificEntity
{
}
内部接口IManager,其中TIdentifier:IIdentifier
{
无效Dostufwith(TIdentifier实体);
}
内部类SpecificEntityManager:IManager
{
公共无效Dostufwith(isSpecificEntity-specificEntity)
{
}
}
}
调试代码时,我在
Main()
中得到一个InvalidCastException

我知道,
isSpecificEntity
实现了
IIdentifier
。 但显然,从
IManager
IManager
的直接转换不起作用

我认为使用协方差可以做到这一点,但将
IManager
更改为
IManager
也没有帮助

那么,有没有办法将
specificManager
转换为
IManager

谢谢,祝您一切顺利。

使用
IManager
您可以执行以下操作:

IIdentifier entity = new NotSpecificEntity();
manager.DoStuffWith(entity);
这将导致您的
SpecificEntityManager
中出现异常,因为它只接受类型为
isSpecificEntity

更新: 你可以在

阅读更多关于C#中协方差和逆变的信息,为什么不:

ISpecificEntity bankAccountManager = new SpecificEntity();
IManager<IIdentifier> manager = (IManager<IIdentifier>)bankAccountManager;
manager.DoStuffWith(new SpecificEntity());
isSpecificEntity bankAccountManager=新的SpecificEntity();
IManager=(IManager)bankAccountManager;
manager.dostufwith(新的SpecificEntity());

请阅读:。。。这就是为什么不允许它做OP想做的事+1但是
isSpecificEntity
实现
IIdentifier
。而
IManager中的
TIdentifier
只接受
IIdentifier
。因此,这一行不应该有例外。我错了吗?嗯,你是对的。我想我必须更改我的摘要代码。它不适用于原始代码中的问题。因为
specificeentity
不是
i管理器
,而是
i标识符