Разница между ссылочными типами производных и базовых классов - PullRequest
0 голосов
/ 17 февраля 2020

Ребята, мне нужна ваша помощь, пожалуйста.

У нас есть этот код:

class Program
{

    static void Main(string[] args)
    {
        Animal pig = new Pig();

        Pig pig2 = new Pig();

        List<Animal> Animals = new List<Animal>();
        Animals.Add(pig);
        Animals.Add(pig2);

        foreach(Animal a in Animals)
        {
            Animal.AnimalSound();
        }
    }
}


class Animal    
{
    public virtual void AnimalSound()
    {
        Console.WriteLine("AnimalSound");
    }
}

class Pig : Animal
{
    public override void AnimalSound()
    {
        Console.WriteLine("wee wee!");
    }
}

Мой вопрос заключается в том, как я определяю переменные pig и pig2 В чем разница Animal pig = new Pig () ; и Pig pig2 = new Pig ();

Почему бы не объявить их обоих как ReferenceType Pig, так как Pig, как всегда, Animal ????

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Разница в том, что имя недоступно, когда вы делаете это Animal pig = new Pig();, но имя доступно в этом случае Pig pig2 = new Pig();. Вы всегда наследуете от базового класса, потому что хотите использовать готовое поведение родительского класса и хотите добавить какое-либо дочернее специфицированное c поведение в дочерний класс. Свинья всегда животное, но не все животные Свинья.

class Pig : Animal
{
    public string name;

    public override void AnimalSound()
    {
        Console.WriteLine("wee wee!");
    }
}
0 голосов
/ 17 февраля 2020

Итак, у вас есть базовый класс Animal и производный класс Pig. Таким образом, наш вопрос может быть заключен в том, в чем разница между базовыми и производными классами:

Базовый класс - это класс, из которого происходят другие классы.

Производный класс - это класс, который создается на основе существующего класса. Некоторые особенности производного класса:

  • Производный класс наследует почти всех свойств базового класса. Private свойства недоступны из-за уровня доступности, однако вы можете использовать отражение, чтобы прочитать их значения.
  • Производный класс может добавлять новые члены к себе или изменять члены базового класса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...