为了账号安全,请及时绑定邮箱和手机立即绑定

泛型和强制转换 - 不能将继承的类强制转换为基类

泛型和强制转换 - 不能将继承的类强制转换为基类

C#
富国沪深 2019-08-28 09:41:16
泛型和强制转换 - 不能将继承的类强制转换为基类我知道这是旧的,但我仍然不太了解这些问题。任何人都可以告诉我为什么以下不起作用(抛出runtime关于投射的例外)?public abstract class EntityBase { }public class MyEntity : EntityBase { }public abstract class RepositoryBase<T> where T : EntityBase { }public class MyEntityRepository : RepositoryBase<MyEntity> { }而现在的铸造线:MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whateverRepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;那么,任何人都可以解释这是如何无效的?而且,我没有心情去解释 - 是否有一行代码我可以用来实际进行演员表演?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

这需要协方差或逆变,其支持仅限于.Net,不能用于抽象类。您可以在接口上使用方差,因此您的问题的可能解决方案是创建一个IRepository,您可以使用它来代替抽象类。

    public interface IRepository<out T> where T : EntityBase { //or "in" depending on the items.
    }
    public abstract class RepositoryBase<T> : IRepository<T> where T : EntityBase {
    }
    public class MyEntityRepository : RepositoryBase<MyEntity> {
    }

    ...

    IRepository<EntityBase> baseRepo = (IRepository<EntityBase>)myEntityRepo;


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 697 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信