Технологии

Решено

Почему на языке c# нельзя присвоить переменой производного класса объект базового? - вопрос №1665496

октябрь 15, 2015 г.

  • Всего ответов: 1

  • another anonymous - аватарка

    another anonymous

    9-й в

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

    допустимо только присвоение переменной типа предок, экземпляра типа потомок

    в контекстах, где надо использовать и предков и потомков, в том числе несколько поколений, следует использовать типы переменных самого старшего предка, и использовать свойства и методы только те, которые были заданы у этого предка (хотя у потомков они могут быть переопределены, тогда для каждого экземпляра будет использован актуальный метод его поколения, собственно в этом суть наследования и переопределений)

    а экземпляры следует создавать в других контекстах, где определяется какое поколение надо создать в конкретной ситуации этого контекста

    обычно методы создания экземпляров называют фабриками и реализуют в виде статических методов (их можно вызывать не имея ни одного созданного экземпляра класса)

    ps строго говоря это не особенность C# — это каноны ООП как такового. это ограничение будет действовать во всех языках объектной парадигмы со строго типизацией

    при этом, если язык допускает перегрузку операторов (а C# допускает) можно переопределить оператор присвоения для создания неявного приведения типов

    в теле такого оператора надо будет создать экземпляр базового класса и задать ему свойства на основе значений экземпляра производного класса, и вернуть его как результат выполнения оператора

    надо понимать что передать особенности потомка при этом все равно невозможно. можно клонировать только те свойства, которые уже были у предка

    и надо помнить что это самостоятельный обьект. манипуляции с ним ни как не отразятся на экземпляре класса потомка. надо будет быть очень внимательным при дальнейшем выборе — каким экземпляром продолжать пользоваться?

    октябрь 15, 2015 г.
    Ответ понравился автору
    Лучший ответ по мнению автора

Похожие вопросы

Решено

LightSwitch

апрель 23, 2012 г.

Технологии