小编Cur*_*tle的帖子

IList <T>和List <T>与接口的转换

我一般都了解接口,继承和多态,但有一件事令我感到困惑.

在这个例子中,Cat实现了IAnimal,当然List实现了IList:

IList<IAnimal> cats = new List<Cat>();
Run Code Online (Sandbox Code Playgroud)

但它会生成编译错误(无法隐式转换类型...).如果我使用Cat继承的asbtract超类[Animal],它也将无效.但是,如果我用Cat替换IAnimal:

IList<Cat> cats = new List<Cat>();
Run Code Online (Sandbox Code Playgroud)

它编译得很好.

在我看来,因为Cat实现了IAnimal,所以第一个例子应该是可以接受的,允许我们返回列表和包含类型的接口.

谁能解释为什么它无效?我确信这是一个合乎逻辑的解释.

c# generics polymorphism interface

6
推荐指数
2
解决办法
1496
查看次数

标签 统计

c# ×1

generics ×1

interface ×1

polymorphism ×1