【发布时间】:2012-04-18 14:04:22
【问题描述】:
为避免混淆,我总结了一些代码:
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
IManager<ISpecificEntity> specificManager = new SpecificEntityManager();
IManager<IIdentifier> manager = (IManager<IIdentifier>) specificManager;
manager.DoStuffWith(new SpecificEntity());
}
}
internal interface IIdentifier
{
}
internal interface ISpecificEntity : IIdentifier
{
}
internal class SpecificEntity : ISpecificEntity
{
}
internal interface IManager<TIdentifier> where TIdentifier : IIdentifier
{
void DoStuffWith(TIdentifier entity);
}
internal class SpecificEntityManager : IManager<ISpecificEntity>
{
public void DoStuffWith(ISpecificEntity specificEntity)
{
}
}
}
当我调试代码时,我在 Main() 中收到 InvalidCastException。
我知道ISpecificEntity 实现了IIdentifier。
但显然从IManager<ISpecificEntity> 直接转换为IManager<IIdentifier> 是行不通的。
我认为使用协方差可以解决问题,但将 IManager<TIdentifier> 更改为 IManager<in TIdentifier> 也无济于事。
那么,有没有办法将specificManager 转换为IManager<IIdentifier>?
谢谢,一切顺利。
【问题讨论】:
标签: c# generics inheritance casting covariance