В чем разница между new и override? - C#
Формулировка задачи:
Цитирую с msdn:
Для чего нужно вообще использовать new? поведение методов одно и то же что и при override.
Или мой код слишком примитивен? Хочу просто разобраться для чего существует два варианта. Или это же просто для того, чтобы не вводить в заблуждение других разработчиков, если методы с одинаковыми именами, но разными совершенно ф-ми?
и получим тот же результат. Так мне интересно для чего все же new?
Если необходимо, чтобы производный член имел то же имя, что и член базового класса, но не нужно, чтобы он участвовал в виртуальном вызове, можно использовать ключевое слово new. Ключевое слово new располагается перед возвращаемым типом замещаемого члена класса. Ниже приведен пример.
class A
{
public A()
{
Console.WriteLine("My A.");
}
public virtual void print()
{
Console.WriteLine("Print A.");
}
}
class B : A
{
public B()
{
Console.WriteLine("My B.");
print();
}
public new void print()
{
//base.print();
Console.WriteLine("Print B.");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
}
}
Кстати, в классе C наследуемом от класса В уже перегрузки метода print() сделать нельзя.
Но даже в этом случае мы же можем использовать в классе В:
public sealed override void print() {}Решение задачи: «В чем разница между new и override?»
textual
Листинг программы
class Base
{
public virtual void Do1()
{
Console.WriteLine("Hello World");
}
public virtual void Do2()
{
Console.WriteLine("Hello World");
}
}
class Test: Base
{
string Name="";
public Test(string name){Name=name;}
public new void Do1(){Console.WriteLine("Hello " + Name); }
public override void Do2(){Console.WriteLine("Hello " + Name); }
}
class Program
{
static void Main(string[] args)
{
Test t = new Test("Bill");
(t as Base).Do1();
(t as Base).Do2();
Console.Read();
}
}