Приведение к базовому классу из производного класса

1

Мой код:

class MyBaseClass 
{ 
    public void Print() 
    { 
        Console.WriteLine("This is the base class."); 
    } 
} 

class MyDerivedClass : MyBaseClass 
{ 
    new public void Print() 
    { 
        Console.WriteLine("This is the derived class."); 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
        MyDerivedClass derived = new MyDerivedClass(); 
        MyBaseClass mybc = (MyBaseClass)derived; 

        derived.Print(); // Call Print from derived portion. 
        mybc.Print(); // Call Print from base portion. 
    } 
} 

Если я изменю строку: MyBaseClass mybc = (MyBaseClass)derived; to MyBaseClass mybc = new MyBaseClass(); , результат был таким же.

Мой вопрос: Можете ли вы сказать мне, в чем разница?

Благодарю!

Показать ещё 2 комментария
Теги:
inheritance

1 ответ

1
Лучший ответ

Ну, ваш первый код был отлит. Значение любых атрибутов, которые вы унаследовали, по-прежнему будет в вашем объекте mybc после этого приведения.

В то время как

MyBaseClass mybc = new MyBaseClass();

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

Если вы напечатаете атрибут своего класса, например имя и номер, вы увидите разницу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню