Почему я не могу добавить конкретные классы в список интерфейсов, которые реализуют конкретные классы? - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблемы с добавлением экземпляра класса, который реализует интерфейс, в список этого интерфейса ; Я получаю ошибки проверки типа.

У меня есть следующее:

  • Базовый класс Pet, содержащий два поля, общих для всех питомцев: PetId и Name.
  • Интерфейс PetInterface, обеспечивающий два поля: PetId и Name.
  • Конкретные классы Dog и Cat, которые наследуются от Pet и реализуют PetInterface.

Код:

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>

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 14 февраля 2020
  1. Я не думаю, что ваш пример кода скомпилируется.
  2. Вы не устанавливаете уровень доступа в свойствах интерфейса, методах, public, private не будет, просто int и String
  3. Вероятно, вы могли бы просто полностью отказаться от интерфейса и просто наследовать от базового класса Pet.

        //The interface contract -> Assures these properties are part of base class
        public interface PetInterface
        {
            int petId { get; set; }
            String name { get; set; }
        }
    
        //base class which defines contract properties of interface PetInterface
        public class Pet : PetInterface
        {
            public int petId { get; set; }
            public String name { get; set; }
        }
    
        public class Dog: Pet
        {
           //Add dog specific properties/methods
        }
    
        public class Cat: Pet
        {
          //Add cat specific properties/methods
        }
    
...