Почему базовый класс позволяет мне создавать экземпляр, используя конструктор производного класса? - PullRequest
1 голос
/ 13 декабря 2011

предположим, у нас есть структура этого класса:

public class BaseClass
{
    public BaseClass()
    {
        Console.WriteLine("Base class constructor has been called.");
    }
}

public class DerivedClass : BaseClass
{
    public DerivedClass()
    {
        Console.WriteLine("Derived class constructor has been called.");
    }
}

, поэтому мой вопрос прост: почему C # позволяет мне создавать экземпляр базового класса, используя конструктор производного класса?для объяснения: BaseClass instance = new DerivedClass ();

Я также хотел бы знать, каков эффект от этого или какие преимущества это даст?Я знаю, что если я выполню этот код, сначала вызывается конструктор базового класса, а затем производный конструктор, потому что это соответствует нормальному поведению наследования классов.спасибо.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Вы не создаете экземпляр базового класса; вы создаете экземпляр производного класса и сохраняете ссылку на него в переменной, имеющей тип базового класса. Переменная с базовым типом, ссылающимся на экземпляр производного типа, является основой полиморфизма.

3 голосов
/ 13 декабря 2011

Вы не;вы создаете экземпляр DerivedClass и сохраняете ссылку на этот экземпляр в переменной, тип которой BaseClass.Любая переменная в C # (или фактически любой объектно-ориентированный язык) типа T может содержать ссылку (или указатель, в зависимости от вашего языка) на любой объект, тип которого T илитип, производный от T в какой-то момент.

Выполнение этого (во всяком случае, в C #) никак не влияет на конструкцию объекта, поэтому никакого «эффекта» в строгом смысле не происходит.

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