powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Чем отличаются инициализации классов A b = new B(); от B b = new B();
25 сообщений из 36, страница 1 из 2
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893406
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс A и его наследник B. Чем отличается объект B b=new B(); от A b=new B();
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893420
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Есть класс A и его наследник B. Чем отличается объект B b=new B(); от A b=new B();

отличаются только типом указателя
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893466
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при перекрытии виртуальных методов через модификатор new метод будет вызываться только в соответствии с объявленным (не фактическим) типом
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893467
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Есть класс A и его наследник B. Чем отличается объект B b=new B(); от A b=new B();

Примерно тем же, чем отличается "объект" B b=new B(); от object b=new B();
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893517
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Есть класс A и его наследник B. Чем отличается объект B b=new B(); от A b=new B();
В первом случае через переменную b будут доступны все члены, а во втором - только члены класса A.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893558
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesотличаются только типом указателя
Сон Веры Павловныпри перекрытии виртуальных методов через модификатор new метод будет вызываться только в соответствии с объявленным (не фактическим) типомсовершенно правильные и совершенно бесполезные ответы для того, кто задает вопрос по основам ООП :)
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893581
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Roman Mejtesотличаются только типом указателя

Сон Веры Павловныпри перекрытии виртуальных методов через модификатор new метод будет вызываться только в соответствии с объявленным (не фактическим) типомсовершенно правильные и совершенно бесполезные ответы для того, кто задает вопрос по основам ООП :)
Очень даже полезные. Особенно про перекрытие виртуальных методов, Сон Веры Павловны , спасибо. Других отличий пока не написано.
Antonariy
Вакан
Есть класс A и его наследник B. Чем отличается объект B b=new B(); от A b=new B();
В первом случае через переменную b будут доступны все члены, а во втором - только члены класса A.

Это не так.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893586
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Особенно про перекрытие виртуальных методов

Не только виртуальных, с виртуальными я слегка ошибся - вообще любых перекрытых методов (ключевого слова new при перекрытии может не быть, оно лишь подавляет предупреждение компилятора, и обязательным для перекрытия не является).
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893591
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны
Вакан
Особенно про перекрытие виртуальных методов

Не только виртуальных, с виртуальными я слегка ошибся - вообще любых перекрытых методов (ключевого слова new при перекрытии может не быть, оно лишь подавляет предупреждение компилятора, и обязательным для перекрытия не является).

А также полей и свойств. Кнопочки Спасибо на этом форуме нет?
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893595
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Это не так.
Это так, без приведения или рефлексии не получишь.
Отладчик показывает реальный класс, на него не ориентируйся.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893596
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
А также полей и свойств.
свойства - это те же методы
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893599
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
Вакан
Это не так.
Это так, без приведения или рефлексии не получишь.
Отладчик показывает реальный класс, на него не ориентируйся.

Понятно, спасибо.
А в каких случаях есть выгода от A b=new B(); вместо B b=new B(); Т.е. почему нельзя было сделать синтаксис просто B b=new();, а не new B();?
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893602
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда у тебя есть зоопарк: A[]
Класс А - животное. Класс B:A - медведь. Класс С:А - слон.
На пальцах понятно получилось?
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893603
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, непонятно, чем в случае с животными лучше A b= new B();A c= new C();, чем B b= new B();C c= new C(); и, соответственно, почему невозможен такой синтаксис B b=new(); C c=new();
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893605
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин. Тем, что их можно поместить в массив A[]

https://ru.wikipedia.org/wiki/Принцип_подстановки_Барбары_Лисков
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893610
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, и так можно их можно поместить в массив A[].
Код: c#
1.
2.
3.
B b = new B(); C c = new C();
            A[] a = new A[2];
            a[0] = b;a[1] = c;


В чем разница? И при чем тут блин. Не хотите - не отвечайте. Я не вынуждаю.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893611
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том, что ты можешь использовать массив А[] невзирая на то, что внутри разнотипные классы, которые друг к другу не приводятся.

Прочитай пожалуйста учебник, в частности раздел "приведение типов", форум - не учебник.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893701
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
А в каких случаях есть выгода от A b=new B(); вместо B b=new B(); Т.е. почему нельзя было сделать синтаксис просто B b=new();, а не new B();?

Трудно даже придумать такие случаи...
Бывает:
Код: c#
1.
2.
3.
4.
5.
A x = null;
if... x = new A()
else if... x = new B()
else x = new C()
... и далее работа с x как с экземпляром A.

но вот выгоду от A b=new B() трудно увидеть...
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893702
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
В том, что ты можешь использовать массив А[] невзирая на то, что внутри разнотипные классы, которые друг к другу не приводятся.

Прочитай пожалуйста учебник, в частности раздел "приведение типов", форум - не учебник.

Учебник уже прочитал, приведение типов знаю. Ты, если есть желание, ответь на заданные вопросы https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1319553&msg=22024002 , а в философских ответах не нуждаюсь.

LR
Вакан
А в каких случаях есть выгода от A b=new B(); вместо B b=new B(); Т.е. почему нельзя было сделать синтаксис просто B b=new();, а не new B();?

Трудно даже придумать такие случаи...
Бывает:
Код: c#
1.
2.
3.
4.
5.
A x = null;
if... x = new A()
else if... x = new B()
else x = new C()
... и далее работа с x как с экземпляром A.

но вот выгоду от A b=new B() трудно увидеть...

Если написать такой код, то в дальнейшем без приведения можно использовать только члены А. А если в дальнейшем в каком-нибудь методе использовать проверку is, as и приведение конкретно к В или С, то проще сразу создавать В в=new B(), С с= new C() и передавать их в метод принимающий А. Т.е. пока от A b=new B(); выгоды нет. Хотя, пример хороший и, вероятно, можно придумать пользу от такой инициализации.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39893954
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
A a = new B();
B b = new B();
// с этим все ОК:
a = b;
// это уже не скомпилится:
b = a;


Поищи в доках разницу между "run-time type" и "compile-time type" - в них и разница.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894001
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан
Shocker.Pro, непонятно, чем в случае с животными лучше A b= new B();A c= new C();, чем B b= new B();C c= new C(); и, соответственно, почему невозможен такой синтаксис B b=new(); C c=new();

Есть такая штука - полиморфизм подтипов.
Например в .NET есть куча методов, которые в качестве параметра принимают Stream и ты можешь передать им любого наследника и они будут работать.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894178
Вакан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat
Код: c#
1.
2.
3.
4.
5.
6.
A a = new B();
B b = new B();
// с этим все ОК:
a = b;
// это уже не скомпилится:
b = a;



И что?
ЕвгенийВ
Вакан
Shocker.Pro, непонятно, чем в случае с животными лучше A b= new B();A c= new C();, чем B b= new B();C c= new C(); и, соответственно, почему невозможен такой синтаксис B b=new(); C c=new();

Есть такая штука - полиморфизм подтипов.
Например в .NET есть куча методов, которые в качестве параметра принимают Stream и ты можешь передать им любого наследника и они будут работать.

Совершенно верно. И что? Вы на какой вопрос отвечаете?
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894227
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакан,

Интересно, откуда вообще возник такой вопрос?
Чем отличается объект B b=new B(); от A b=new B()
Если такое (A b=new B()) где-то встречается в коде, единственным логическим объяснением может быть что это просто неподправленный фрагмент вследствие copy-paste? И тогда, кстати, впоминаются баталии тут на форуме по поводу того, стоит ли использовать var вместо точного указания типа (очевидно, var улучшает технологию copy-paste)))
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894559
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВаканОчень даже полезные. Это вам так кажется. Свойство человеческой психики таково, что она склонна принимать на веру наукообразные объяснения без критической оценки и попадает в иллюзию, будто все стало понятно. А на самом деле нет, просто слова запомнились на уровне рефлексов, как у попугаев, без привязки к практическому опыту, то есть без настоящего понимания. И это прекрасно видно дальше по тексту - вы не догоняете элементарные примеры.
...
Рейтинг: 0 / 0
Чем отличаются инициализации классов A b = new B(); от B b = new B();
    #39894564
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR
Если такое (A b=new B()) где-то встречается в коде, единственным логическим объяснением может быть что это просто неподправленный фрагмент вследствие copy-paste?
Верно, это объявление абсолютно бессмысленно. Если b нужно передать куда-то, где оно обрабатывается как A, то оно к А будет приведено само собой.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Чем отличаются инициализации классов A b = new B(); от B b = new B();
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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