В чем разница между new и override? - C#

Узнай цену своей работы

Формулировка задачи:

Цитирую с msdn:
Если необходимо, чтобы производный член имел то же имя, что и член базового класса, но не нужно, чтобы он участвовал в виртуальном вызове, можно использовать ключевое слово new. Ключевое слово new располагается перед возвращаемым типом замещаемого члена класса. Ниже приведен пример.
Для чего нужно вообще использовать new? поведение методов одно и то же что и при override. Или мой код слишком примитивен? Хочу просто разобраться для чего существует два варианта. Или это же просто для того, чтобы не вводить в заблуждение других разработчиков, если методы с одинаковыми именами, но разными совершенно ф-ми?
Листинг программы
  1. class A
  2. {
  3. public A()
  4. {
  5. Console.WriteLine("My A.");
  6. }
  7. public virtual void print()
  8. {
  9. Console.WriteLine("Print A.");
  10. }
  11. }
  12. class B : A
  13. {
  14. public B()
  15. {
  16. Console.WriteLine("My B.");
  17. print();
  18. }
  19. public new void print()
  20. {
  21. //base.print();
  22. Console.WriteLine("Print B.");
  23. }
  24. }
  25. class Program
  26. {
  27. static void Main(string[] args)
  28. {
  29. A a = new A();
  30. B b = new B();
  31. }
  32. }
Кстати, в классе C наследуемом от класса В уже перегрузки метода print() сделать нельзя. Но даже в этом случае мы же можем использовать в классе В:
Листинг программы
  1. public sealed override void print() {}
и получим тот же результат. Так мне интересно для чего все же new?

Решение задачи: «В чем разница между new и override?»

textual
Листинг программы
  1. class Base
  2. {
  3.      public virtual void Do1()
  4.      {
  5.            Console.WriteLine("Hello World");
  6.      }
  7.      public virtual void Do2()
  8.      {
  9.            Console.WriteLine("Hello World");
  10.      }
  11. }
  12. class Test: Base
  13. {
  14.        string Name="";
  15.        public Test(string name){Name=name;}
  16.        public new void Do1(){Console.WriteLine("Hello " + Name); }
  17.        public override void Do2(){Console.WriteLine("Hello " + Name); }
  18. }
  19.      class Program
  20.     {
  21.         static void Main(string[] args)
  22.         {
  23.             Test t = new Test("Bill");
  24.             (t as Base).Do1();
  25.             (t as Base).Do2();
  26.             Console.Read();
  27.         }
  28.       }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы