Мой код:
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();
, результат был таким же.
Мой вопрос: Можете ли вы сказать мне, в чем разница?
Благодарю!
Ну, ваш первый код был отлит. Значение любых атрибутов, которые вы унаследовали, по-прежнему будет в вашем объекте mybc после этого приведения.
В то время как
MyBaseClass mybc = new MyBaseClass();
просто создает полностью новый экземпляр вашего базового класса. Поскольку вы жестко закодировали свой метод печати, он не может изменить какой-либо вывод, так как они оба одного типа.
Если вы напечатаете атрибут своего класса, например имя и номер, вы увидите разницу.
new
вопрос и вопрос оoverride
- если вы хотите другое поведение, вы должны сделатьPrint
виртуальной и использоватьoverloads
вместоnew