powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делает модификатор new?
25 сообщений из 53, страница 1 из 3
Что делает модификатор new?
    #39351583
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Везде пишут, что он скрывает метод помеченный модификатором new, не могу понять что значит "скрывает"?
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351586
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ricardo_Всем привет! Везде пишут, что он скрывает метод помеченный модификатором new, не могу понять что значит "скрывает"?

Правильно говорить, перекрывает. Под «скрывает» надо понимать, что перекрытый с помощью new метод базового класса теперь может быть доступен только при приведении объекта к типу базового класса. Иначе его никак не вызвать.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351595
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt_ricardo_Всем привет! Везде пишут, что он скрывает метод помеченный модификатором new, не могу понять что значит "скрывает"?

Правильно говорить, перекрывает. Под «скрывает» надо понимать, что перекрытый с помощью new метод базового класса теперь может быть доступен только при приведении объекта к типу базового класса. Иначе его никак не вызвать.
Не совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода . Само по себе перекрытие делается собственно объявлением метода, и модификатор new в перекрытии никакого участия не принимает. И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351615
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныА этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить вниманиеНа мой взгляд как раз new и заставляет обратить на него внимание, не запрещая сделать перекрытие, если очень хочется. Хотя в моей практике не встречалось необходимости так делать.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351620
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).
Тоже думал об нем. Есть случай , когда без него никак.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351635
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТоже думал об нем. Есть случай , когда без него никак.
Не. Я выше немного про другое - не столько про перекрытие (бывают ситуации, когда костыль - единственное решение, и никуда не денешься), сколько именно про модификатор. Который просто давит варнинг компилятора.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351637
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно не рекомендуют его исполь3овать, потому как скрыть по настоящему не получится
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351682
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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 virtual void meth1()
        {
            Console.WriteLine("I am an A");
        }
    }

    class B : A
    {
        public override void meth1()
        {
            Console.WriteLine("I am a B");
        }
    }

    class C : B
    {
        public new virtual void meth1()
        {
            Console.WriteLine("I am a C");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new C();
            a.meth1();

            Console.ReadKey();
        }
    }

Почему на выходе будет "I am a B"? То есть, если мы объект класса C приводим к типу класса A, то мы двигаемся по иерархии от класса C до класса A и останавливаемся на первом методе, который имеет модификатор override, так? Поясните пожалуйста, голова дымится.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351765
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ricardo_
Код: 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 virtual void meth1()
        {
            Console.WriteLine("I am an A");
        }
    }

    class B : A
    {
        public override void meth1()
        {
            Console.WriteLine("I am a B");
        }
    }

    class C : B
    {
        public new virtual void meth1()
        {
            Console.WriteLine("I am a C");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new C();
            a.meth1();

            Console.ReadKey();
        }
    }

Почему на выходе будет "I am a B"? То есть, если мы объект класса C приводим к типу класса A, то мы двигаемся по иерархии от класса C до класса A и останавливаемся на первом методе, который имеет модификатор override, так? Поясните пожалуйста, голова дымится.
override переопределяет метод, а не перекрывает его, так как создается экземпляр класс C наследованное от класса B, а вызывается метод meth1 класса А, который переопределен классом B, то выполняется метод из класса B, по моему всё логично
Если вам нужно использовать ключевое слово new, это значит только то, что вы делайте что-то неправильно
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351842
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes_ricardo_
Код: 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 virtual void meth1()
        {
            Console.WriteLine("I am an A");
        }
    }

    class B : A
    {
        public override void meth1()
        {
            Console.WriteLine("I am a B");
        }
    }

    class C : B
    {
        public new virtual void meth1()
        {
            Console.WriteLine("I am a C");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new C();
            a.meth1();

            Console.ReadKey();
        }
    }

Почему на выходе будет "I am a B"? То есть, если мы объект класса C приводим к типу класса A, то мы двигаемся по иерархии от класса C до класса A и останавливаемся на первом методе, который имеет модификатор override, так? Поясните пожалуйста, голова дымится.
override переопределяет метод, а не перекрывает его, так как создается экземпляр класс C наследованное от класса B, а вызывается метод meth1 класса А, который переопределен классом B, то выполняется метод из класса B, по моему всё логично
Если вам нужно использовать ключевое слово new, это значит только то, что вы делайте что-то неправильноСпасибо, теперь всё встало на свои места.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351846
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНе совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода .

По факту это так, но всего лишь из-за того, что разработчики языка затупили. Без new должна быть ошибка, следует именно так это и воспринимать. Рихтер об этом писал.


Сон Веры ПавловныНе совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода . Само по себе перекрытие делается собственно объявлением метода, и модификатор new в перекрытии никакого участия не принимает. И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).

Ну ты уже предлагаешь заткнуть ствол ружья деревянной пробкой, чтобы не выстрилить в ногу. Достаточно было сделать new обязательным при перекрытии метода.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351860
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСон Веры ПавловныНе совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода .

По факту это так, но всего лишь из-за того, что разработчики языка затупили. Без new должна быть ошибка, следует именно так это и воспринимать. Рихтер об этом писал.

Почему именно ошибка?
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351862
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПочему именно ошибка?

Чтобы ты не смог пройти мимо, на предупреждение компилятора можно и не обратить внимание.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351885
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Чтобы ты не смог пройти мимо, на предупреждение компилятора можно и не обратить внимание.
Это неправильно, ибо может зависить не только от тебя и твой код, который вчера нормально компилировался, сегодня валиться с ошибкой.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39351942
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

потому, что в 1 классе не могут быть 2 одинаковых метод с одним именем и одной сигнатурой.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352015
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЕвгенийВ,

потому, что в 1 классе не могут быть 2 одинаковых метод с одним именем и одной сигнатурой.
Эт к чему?
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352016
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЭто неправильно, ибо может зависить не только от тебя и твой код, который вчера нормально компилировался, сегодня валиться с ошибкой.

Это неправильно делать ошибку сейчас, это надо было делать раньше на этапе создания языка. Т.е. на лицо косяк разработчиков C# с далеко идущими последствиями. Конечно, не критичными, но всё же. Возможно в какой-то версии они частично откажутся от обратной совместимости, чтобы улучшить дизайн языка.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352155
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕвгенийВЭто неправильно, ибо может зависить не только от тебя и твой код, который вчера нормально компилировался, сегодня валиться с ошибкой.

Это неправильно делать ошибку сейчас, это надо было делать раньше на этапе создания языка. Т.е. на лицо косяк разработчиков C# с далеко идущими последствиями. Конечно, не критичными, но всё же. Возможно в какой-то версии они частично откажутся от обратной совместимости, чтобы улучшить дизайн языка.
Какую ошибку? Какой косяк? Все там правильно. В Java все методы виртуальные и они зашли с другой стороны.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352266
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типичный вопрос из собеседований. а на практике кто-то в своем уме это делает?
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352283
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНе совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода . Само по себе перекрытие делается собственно объявлением метода, и модификатор new в перекрытии никакого участия не принимает. И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).

hVosttЭто неправильно делать ошибку сейчас, это надо было делать раньше на этапе создания языка. Т.е. на лицо косяк разработчиков C# с далеко идущими последствиями. Конечно, не критичными, но всё же. Возможно в какой-то версии они частично откажутся от обратной совместимости, чтобы улучшить дизайн языка.

Чуть не заплакал

Люди добрые, слово полиморфизм кому-то о чем-то говорит?

Ключевое слово new используют, если надо производному члену иметь такое же имя, как член в базовом классе. При этом вообще не требуется, чтобы он участвовал в виртуальном вызове. Собственно, вся "архитектура".
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352339
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиКлючевое слово new используют, если надо производному члену иметь такое же имя, как член в базовом классе.
Производный член вполне может иметь такое же имя, как и в базовом классе, без слова new.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352381
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиЧуть не заплакал

Люди добрые, слово полиморфизм кому-то о чем-то говорит?

Ключевое слово new используют, если надо производному члену иметь такое же имя, как член в базовом классе. При этом вообще не требуется, чтобы он участвовал в виртуальном вызове. Собственно, вся "архитектура".

Да ты прям местный Колумб, не меньше!
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352409
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныСмузиКлючевое слово new используют, если надо производному члену иметь такое же имя, как член в базовом классе.
Производный член вполне может иметь такое же имя, как и в базовом классе, без слова new.

Нечаянно вырвал из контекста?

СмузиПри этом вообще не требуется, чтобы он участвовал в виртуальном вызове.
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352597
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смузи
Ключевое слово new используют, если надо производному члену иметь такое же имя, как член в базовом классе. При этом вообще не требуется, чтобы он участвовал в виртуальном вызове. Собственно, вся "архитектура".
А когда это требуется?
...
Рейтинг: 0 / 0
Что делает модификатор new?
    #39352605
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВА когда это требуется?
Тут вопрос не в частоте использования, а в поддержке одного из фундаментальных столпов современных языков - полиморфизма. К примеру, я это не использую вообще. Но это не значит, что это проблема C#, дырки в архитектуре и прочие обвинения. Жить по принципу мне морковка не нравится, это всё тупые селекционеры - контрпродуктивно.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делает модификатор new?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]