Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
 Аватар для LW3TIUWR
12 / 12 / 4
Регистрация: 30.12.2012
Сообщений: 54

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

05.08.2013, 14:28. Показов 8242. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитирую с msdn:

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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();
        }
    }
Добавлено через 9 минут
Кстати, в классе C наследуемом от класса В уже перегрузки метода print() сделать нельзя.
Но даже в этом случае мы же можем использовать в классе В:

C#
1
public sealed override void print() {}
и получим тот же результат. Так мне интересно для чего все же new?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.08.2013, 14:28
Ответы с готовыми решениями:

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

В чем разница между С и С++
Возник вопрос в чем жи разница между С и С++ кроме того, что в С++ есть классы а в С их нету ?

В чем разница между [] и * ?
Думал, что ни в чем, но когда попытался сделать так: (в файле 1) char lc; в файле 2: extern char* lc; Компилятор ругаться не стал,...

6
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 2
05.08.2013, 14:43
разница есть, если ты хочешь использовать полиморфизм!
C#
1
2
A aaa = new B();
aaa.print();
при new вызывается print() класса А
при override вызывается print() класса B
0
 Аватар для LW3TIUWR
12 / 12 / 4
Регистрация: 30.12.2012
Сообщений: 54
05.08.2013, 14:50  [ТС]
Цитата Сообщение от Kozzzak Посмотреть сообщение
разница есть, если ты хочешь использовать полиморфизм!
C#
1
2
A aaa = new B();
aaa.print();
при new вызывается print() класса А
при override вызывается print() класса B
Об этом я читал. А в чем практическая ценность данного примера?
но виртуальные методы как бы не обязательно перегружать. вот не пойму.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
05.08.2013, 14:55
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вы не понимаете что такое полиморфизм. Ведь именно для этого существуют виртульные методы.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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();
        }
      }
Do1 выведет Hello World - так как использовано слово new и метод базового класса не переопределился
Do2 выведет Hello Bill - так как использована перегрузка виртуального метода базового класса
1
 Аватар для LW3TIUWR
12 / 12 / 4
Регистрация: 30.12.2012
Сообщений: 54
05.08.2013, 14:59  [ТС]
Я понял свою оплошность спасибо за ответ.
0
 Аватар для Awaking
0 / 0 / 0
Регистрация: 27.08.2012
Сообщений: 7
05.10.2013, 09:20
Learx,
Так ведь можно new вообще не писать. Получится то же самое.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.10.2013, 12:47
Awaking, можно — это поведение по умолчанию.
Но компилятор ругнется ворнингом, а при определенных настройках и вообще ошибкой.
Указание new — это явное обозначение своих намерений затенить родительский метод. Мол, это так надо, а не просто по ошибке создал метод с уже существующей сигнатурой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2013, 12:47
Помогаю со студенческими работами здесь

В чём разница между .each() и $.each()
читаю про jquery и там есть .each() и $.each() в чем разница? Где можно прочитать про тонкости jquery? Давайте осмысленные названия...

В чем разница между . и ,
Вот столкнулся с таким вопросом вчем разница между . и , Привер <? echo '<pre>',var_dump($array),'</pre>'; ?> ...

В чем разница между X x; и X x()?
Корректный ли этот ответ?

В чем разница между ^p и ^13
Заменой сделал строку с ^p и строку с ^13 с Подстановочными знаками. Если поместить курсор на строку с ^13, то курсор станет за знаком...

В чем разница между С++ и С?
Чем отличается С и С++, кроме того что С++ есть ООП?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru