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

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

Правильно говорить, перекрывает. Под «скрывает» надо понимать, что перекрытый с помощью new метод базового класса теперь может быть доступен только при приведении объекта к типу базового класса. Иначе его никак не вызвать.
Не совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода . Само по себе перекрытие делается собственно объявлением метода, и модификатор new в перекрытии никакого участия не принимает. И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).
...
Рейтинг: 0 / 0
22.11.2016, 09:57
    #39351615
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
Сон Веры ПавловныА этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить вниманиеНа мой взгляд как раз new и заставляет обратить на него внимание, не запрещая сделать перекрытие, если очень хочется. Хотя в моей практике не встречалось необходимости так делать.
...
Рейтинг: 0 / 0
22.11.2016, 10:17
    #39351620
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
Сон Веры Павловны И я, чесговоря, был бы не против, если бы этого модификатора new не было вообще, т.к. по моему скромному, перекрытие метода говорит о явном косяке в архитектуре. А этот new помогает этот косяк спрятать (в то время, как на него стоило бы обратить внимание из-за некоторых особенностей вызова перекрытых методов).
Тоже думал об нем. Есть случай , когда без него никак.
...
Рейтинг: 0 / 0
22.11.2016, 10:34
    #39351635
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
ЕвгенийВТоже думал об нем. Есть случай , когда без него никак.
Не. Я выше немного про другое - не столько про перекрытие (бывают ситуации, когда костыль - единственное решение, и никуда не денешься), сколько именно про модификатор. Который просто давит варнинг компилятора.
...
Рейтинг: 0 / 0
22.11.2016, 10:37
    #39351637
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
обычно не рекомендуют его исполь3овать, потому как скрыть по настоящему не получится
...
Рейтинг: 0 / 0
22.11.2016, 11:23
    #39351682
_ricardo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
Код: 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
22.11.2016, 12:44
    #39351765
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
_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
22.11.2016, 13:55
    #39351842
_ricardo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
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
22.11.2016, 13:59
    #39351846
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делает модификатор new?
Сон Веры ПавловныНе совсем так. Модификатор new просто тупо подавляет варнинг компилятора о перекрытии метода .

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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