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

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

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

Цитирую с msdn:
Если необходимо, чтобы производный член имел то же имя, что и член базового класса, но не нужно, чтобы он участвовал в виртуальном вызове, можно использовать ключевое слово new. Ключевое слово new располагается перед возвращаемым типом замещаемого члена класса. Ниже приведен пример.
Для чего нужно вообще использовать new? поведение методов одно и то же что и при override. Или мой код слишком примитивен? Хочу просто разобраться для чего существует два варианта. Или это же просто для того, чтобы не вводить в заблуждение других разработчиков, если методы с одинаковыми именами, но разными совершенно ф-ми?
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?

Решение задачи: «В чем разница между 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();
        }
      }

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


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

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

11   голосов , оценка 4.182 из 5
Похожие ответы