【发布时间】:2020-02-14 17:03:56
【问题描述】:
我无法将实现接口的类的实例添加到该接口的列表;我收到类型验证错误。
我有以下几点:
- 基类
Pet包含所有宠物共有的两个字段:PetId和Name。 - 一个接口
PetInterface强制执行两个字段:PetId和Name。 - 从
Pet继承并实现PetInterface的具体类Dog和Cat。
代码:
public interface PetInterface
{
public int PetId { get; set; }
public string Name { get; set; }
}
public class Pet
{
public int PetId { get; set; }
public string Name { get; set; }
}
public class Dog: Pet, PetInterface
{
}
public class Cat: Pet, PetInterface
{
}
场景 1:
var dog = new Dog();
var cat = new Cat();
List<PetInterface> petInterfaceList = new List<PetInterface>();
petInterfaceList.Add(dog1); //Error: cannot convert Dog to PetInterface class
petInterfaceList.Add(cat1); //Error: cannot convert Cat to PetInterface class
场景 2:
var dog = new Dog();
var cat = new Cat();
var petList = new List<Pet>({dog, cat});
List<PetInterface> petInterfaceList = petList //Error: cannot convert List<Pet> to List<PetInterface>
我在这里错过了什么?
【问题讨论】:
-
让类
Pet实现接口,然后继承Dog和Cat中的Pet -
C# 版本是什么:
Inherits Pet || Implements PetInterface? -
您的代码似乎包含很多错别字。你能先修好它们吗?这包括但不限于:
dog1和cat1在第一个代码sn-p中应该是dog和cat吧? -
"
var cat = new Dog();"你有一只迷糊的狗 -
鉴于您拥有的(概念上),场景 1 应该可以正常工作(请参阅 this dotnetfiddle)。正如其他人指出的那样,场景2中的错误仅仅是因为
Pet和PetInterface之间没有转换。
标签: c# interface polymorphism conceptual