Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите по наследованию / 25 сообщений из 36, страница 1 из 2
10.12.2020, 18:35
    #40026504
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
   public class A
        {
            public virtual void Print1()
            {
                Console.WriteLine("A.print1");
            }
           
        }
        public class B : A
        {
            public /*override*/ void Print1()
            {
                Console.WriteLine("B.print1");
            }
        }


        public static void Main(string[] args)
        {           
            A b = new B();
        
            b.Print1();         
        }



Почему выводится A.print1? Ссылка же ведет на тип данных B
Если перегрузка, то ищется метод у текущего объекта
...
Рейтинг: 0 / 0
10.12.2020, 18:42
    #40026512
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
Почему выводится A.print1? Ссылка же ведет на тип данных B

У хВоста спроси - он наследование любит
...
Рейтинг: 0 / 0
10.12.2020, 18:44
    #40026514
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview,

Ты, похоже, на ворнинги вообще не смотришь? Потому что ворнинг CS0114 должен быть. А так-то такие вопросы ну уж совсем джунам на интервью обычно задают.
...
Рейтинг: 0 / 0
10.12.2020, 19:53
    #40026565
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
Почему выводится A.print1?
Потому что у тебя b имеет тип A. Учебник прочти.
...
Рейтинг: 0 / 0
11.12.2020, 08:42
    #40026684
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Shocker.Pro
listtoview
Почему выводится A.print1?
Потому что у тебя b имеет тип A. Учебник прочти.

нет
тип переменной b является B
...
Рейтинг: 0 / 0
11.12.2020, 10:01
    #40026704
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
Shocker.Pro
пропущено...
Потому что у тебя b имеет тип A. Учебник прочти.

нет
тип переменной b является B
ты путаешь переменную и экземпляр
...
Рейтинг: 0 / 0
11.12.2020, 10:20
    #40026709
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
Shocker.Pro
пропущено...
Потому что у тебя b имеет тип A. Учебник прочти.

нет
тип переменной b является B

ты путаешь тип времени выполнения и тип времени компиляции.
...
Рейтинг: 0 / 0
11.12.2020, 15:23
    #40026874
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Коллеги, а зачем сделано так что модификатор доступа производного класса должен быть таким же или более строгим чем базового?

Например я не хочу что бы животных плодили, а людей пожалуйста
...
Рейтинг: 0 / 0
11.12.2020, 15:31
    #40026879
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
А что тут странного. Если кто-то свойство в классе сделал приватным, он понимает, что делать возможность его публичную модификацию опасно (например из-за потери консистентности). А ты хочешь взять и разрушить базовый класс.
...
Рейтинг: 0 / 0
11.12.2020, 15:39
    #40026887
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Shocker.Pro
А что тут странного. Если кто-то свойство в классе сделал приватным, он понимает, что делать возможность его публичную модификацию опасно (например из-за потери консистентности). А ты хочешь взять и разрушить базовый класс.

рефлекшен выручит)
ну да, это я чет подтупливаю, вопрос снят
просто когда virtual и override все просто, а вот с перегрузкой да еще и new плаваю
ушел читать
...
Рейтинг: 0 / 0
11.12.2020, 15:47
    #40026894
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
еще и new

"Еще и new" это говнокод. И "virtual", по-хорошему, тоже быть нигде не должно. Должно быть либо "abstract", либо "override sealed". Потому что перегрузка неабстрактных методов, за редким исключением, это тоже говнокод.
...
Рейтинг: 0 / 0
11.12.2020, 16:57
    #40026945
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
fkthat
Потому что перегрузка неабстрактных методов, за редким исключением, это тоже говнокод.


Чего это? )))

Целая канистра аксимоматичных утверждений, как выясняется ни на чём не основанных ))
...
Рейтинг: 0 / 0
11.12.2020, 17:22
    #40026960
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
hVostt
Чего это? )))

Это МЕДИАТОР!
...
Рейтинг: 0 / 0
11.12.2020, 17:27
    #40026963
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
fkthat
hVostt
Чего это? )))

Это МЕДИАТОР!


Да откуда ты эти странные идеи вообще достаёшь? :)
Ты бы к ним аттачил хоть парочку обоснований, хотя бы для себя.
...
Рейтинг: 0 / 0
11.12.2020, 17:31
    #40026965
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
hVostt
хоть парочку обоснований

Можно подумать, что тебя интересуют обоснования, или, что ты хотя бы их читаешь :))
...
Рейтинг: 0 / 0
11.12.2020, 17:42
    #40026975
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
fkthat
hVostt
хоть парочку обоснований

Можно подумать, что тебя интересуют обоснования, или, что ты хотя бы их читаешь :))


Конечно интересуют, более того, многое мне близко, проходил и даже так когда-то думал )

Разве плохо, иметь чёткое обоснование для тех или иных утверждений.

Некоторые вещи намеренно обозначают как "абсолютное зло" (например, GOTO), чтобы выжечь практику использование совсем, на корню. Но это вовсе не означает, что тот же GOTO это абсолютное зло ))
...
Рейтинг: 0 / 0
11.12.2020, 19:18
    #40027014
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
просто когда virtual и override все просто, а вот с перегрузкой да еще и new плаваю

Еще один повод перейти в java - там, вроде бы, все виртуальное :))
...
Рейтинг: 0 / 0
11.12.2020, 21:57
    #40027051
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
fkthat
hVostt
Чего это? )))

Это МЕДИАТОР!

В некоторых случаях (как, например, с наркотиками) практичней что-то запретить, чем объяснять каждому.

Вкратце, перегрузка это всегда способ нагамнюжить при неправильном использовании, причем, что важнее, нагамнюжить не в свой код (это ладно бы), а в чужой. Т.ч. сто раз надо продумать и просчитать, прежде чем давать возможность кому угодно что-то перегружать по своим хотелкам - чаще практичней сделать sealed.
...
Рейтинг: 0 / 0
11.12.2020, 23:09
    #40027069
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
hVostt
Некоторые вещи намеренно обозначают как "абсолютное зло" (например, GOTO), чтобы выжечь практику использование совсем, на корню. Но это вовсе не означает, что тот же GOTO это абсолютное зло ))

Смысла нет обсуждать, ведь у вас в ПХП без goto все равно ведь никак?
...
Рейтинг: 0 / 0
14.12.2020, 15:50
    #40027668
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
fkthat
listtoview,

Ты, похоже, на ворнинги вообще не смотришь? Потому что ворнинг CS0114 должен быть. А так-то такие вопросы ну уж совсем джунам на интервью обычно задают.

CS0108
...
Рейтинг: 0 / 0
14.12.2020, 18:07
    #40027730
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Коллеги, подскажите, где может понадобиться сокрытие?
Код: 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.
        public class Cat
        {
            public void Speak()
            {
                Console.WriteLine("Cat.meow");
            }
           
        } 
        public class Tiger : Cat
        {                                     
            public new void Speak()
            {
                Console.WriteLine("Tiger.rrr");
            }
        }


        public static void Main(string[] args)
        {
            Cat a = new Cat();
            Cat b = new Tiger();
            a.Speak();
            b.Speak();

            //Console.WriteLine(b.GetType().Name);                     
        }


на мой взгляд конкретный тигр должен рычать даж если мы на него смотрим как на кошку. При переопределении так и происходит. А вот зачем нужно впринципе сокрытие непонятно. Поясните пожалуйста. Спасибо.
...
Рейтинг: 0 / 0
14.12.2020, 18:20
    #40027736
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
listtoview
А вот зачем нужно впринципе сокрытие непонятно
нигде, тебе же сказали. Не пользуйся
...
Рейтинг: 0 / 0
14.12.2020, 18:21
    #40027738
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Сокрытие может возникнуть случайно, если ты добавил метод к унаследованному классу, а потом производитель базового класса добавил метод с такой же сигнатурой. Тогда ты можешь добавить new чтобы подавить варнинг, но лучше по возможности отрефакторить свой метод.
...
Рейтинг: 0 / 0
15.12.2020, 08:04
    #40027840
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
Shocker.Pro
Сокрытие может возникнуть случайно, если ты добавил метод к унаследованному классу, а потом производитель базового класса добавил метод с такой же сигнатурой. Тогда ты можешь добавить new чтобы подавить варнинг, но лучше по возможности отрефакторить свой метод.

ок
...
Рейтинг: 0 / 0
15.12.2020, 09:01
    #40027849
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по наследованию
воощем когда VMT, то все хорошо и метод определяется по типу времени компиляции
во всех остальных(сокрытие, перегрузка) по типу времени выполнения
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите по наследованию / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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