我一般都了解接口,继承和多态,但有一件事令我感到困惑.
在这个例子中,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,所以第一个例子应该是可以接受的,允许我们返回列表和包含类型的接口.
谁能解释为什么它无效?我确信这是一个合乎逻辑的解释.