Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22

Правила создания объектов в сишарп?

17.10.2016, 11:33. Показов 3907. Ответов 29

Студворк — интернет-сервис помощи студентам
Подскажите при создании объекта:

Person p1 = new Person
Person p2 = new Employee
Employee p3 = new Employee

После new мы указываем класс, экземпляром котоого будет объекты p1,2,3. Зачем указывать - Person перед p1,2, и Employee перед p3? что это такое в коде?
в приведённом коде класс Employee это наследник Person.
если я правильно понял, то это тип объекта, но что это такое тип объекта? и как тип объекта у p2 может быть Person, если это экземпляр Employee. изначально, я думал, что это просто правило записи создания нового объекта, т.е. перед названием и после слова new надо указывать Имя класса, и думал, что они должны быть одинаковы. в справочниках и поиске не нашёл ничего по запросу - что определяет тип объекта в сишарп
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2016, 11:33
Ответы с готовыми решениями:

Правила создания БД
изучаю руководство к SQL и натыкаюсь на такой пункт... "Если создать файл, который будет являться частью базы данных, то его нельзя...

Правила размещения объектов в памяти
Привет всем! Подскажите пожалуйста, искал по форуму поиском ответ, но не нашел. Имеем такой код: class A{ public A(); ...

Основные правила создания начальной структуры ИР . и не только
Уважаемые форумчане! Предлагаю ВАМ, вместе со мной (вернее при моём участии)), в течении короткого времени (просто большим...

29
Заблокирован
17.10.2016, 11:36
Цитата Сообщение от arh Посмотреть сообщение
что определяет тип объекта в сишарп
Он определяет все. Класс объекта - это его интерфейс, его данные и методы. Это то, с чем тебе потом в программе работать.
Цитата Сообщение от arh Посмотреть сообщение
перед названием и после слова new надо указывать Имя класса, и думал, что они должны быть одинаковы.
Тебе нужно почитать про наследование и полиморфизм. Тогда станет понятно, почему имя может отличаться, и зачем.
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 11:49  [ТС]
как раз, когда я начал читать про наследование, я увидел этот пример, но объяснения зачем указывается разное имя перед именем нового объекта (при одинаковом имени класса после слова new) я не понял.

Добавлено через 4 минуты
а разве после слова new имя класса не определяет всё - его данные и методы. зачем писать имя класса в начале?
0
Заблокирован
17.10.2016, 11:52
Цитата Сообщение от arh Посмотреть сообщение
зачем писать имя класса в начале?
В начале у нас может быть, например, базовый класс, или интерфейс. Например, вместо массива медведей я могу иметь массив зверей, котором будут объекты не только медведей, но и ленивцев. Тогда смогу с разными объектами работать, используя их общие части присущие базовому класс - животное. Если грубо и кратко. Более детальные примеры и объяснения - все в книгах.
Цитата Сообщение от arh Посмотреть сообщение
когда я начал читать про наследование
До конца дочитай
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:02  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
В начале у нас может быть, например, базовый класс, или интерфейс.
т.е. можно вообще ничего не указывать?
Цитата Сообщение от nimazzzy Посмотреть сообщение
До конца дочитай
я понял, что если использовать переопределение метода override или скрыть словом new, то будут разные результаты, при разных именах классов перед p2 и p3. дочитал статью до конца, но блин там нигде не написано зачем нам указывать разные имена классов перед названием объекта.
с твоих слов я понял, что у экземпляра объекта базовый класс может отличаться от класса, экземпляром которого является объект, правильно?
Если знаешь где можно почитать об этом подробнее, кинь ссылку плиз.
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
17.10.2016, 12:08
arh, слева ты указываешь тот интерфейс с которым хочешь работать, справа (после new) - то чем объекст на самом деле является.
C#
1
2
3
4
5
6
7
8
9
10
interface НечтоПохожееНаКошку { }
class Кошка : НечтоПохожееНаКошку { }
class Котопес : НечтоПохожееНаКошку { }
class Робокошка : НечтоПохожееНаКошку { }
 
// Нам нужно только "нечто похожее на кошку"
// и совсем пофиг на то, что это конкретно есть
НечтоПохожееНаКошку o1 = new Кошка();
НечтоПохожееНаКошку o2 = new Котопес();
НечтоПохожееНаКошку o3 = new Робокошка();
2
Заблокирован
17.10.2016, 12:10
Цитата Сообщение от arh Посмотреть сообщение
т.е. можно вообще ничего не указывать?
Нельзя. Компилятор должен знать, на что ссылается имя. Но есть еще такие вещи как dynamic и var.
Цитата Сообщение от arh Посмотреть сообщение
с твоих слов я понял, что у экземпляра объекта базовый класс может отличаться от класса, экземпляром которого является объект, правильно?
Ничего не понял
Цитата Сообщение от arh Посмотреть сообщение
Если знаешь где можно почитать об этом подробнее, кинь ссылку плиз.
Для чего вообще нужен полиморфизм. Какая польза от наследования
https://ru.wikipedia.org/wiki/... 0%BA%D0%B0)
https://habrahabr.ru/post/148015/
http://java-course.ru/begin/polymorphism/
http://devcolibri.com/720

Язык значения не имеет, концепция одна.
1
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:22  [ТС]
Цитата Сообщение от Aael Посмотреть сообщение
слева ты указываешь тот интерфейс с которым хочешь работать, справа
может всё дело в том, что при изучении, я ещё не дошёл до понятия интерфейсов? просто глава интерфейсы, на том ресурсе, где я изучаю, идёт после главы классы/объекты . т.е. для понимания, надо изучить интерфейсы?
0
Заблокирован
17.10.2016, 12:25
Цитата Сообщение от arh Посмотреть сообщение
может всё дело в том, что при изучении, я ещё не дошёл до понятия интерфейсов? просто глава интерфейсы, на том ресурсе, где я изучаю, идёт после главы классы/объекты . т.е. для понимания, надо изучить интерфейсы?
Нет, достаточно понимать, в каких ситуациях используется наследование и полиморфизм.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.10.2016, 12:27
arh,
В качестве НечтоПохожееНаКошку может использоваться не только интерфейс, но и базовый класс, причем даже не обязательно абстрактный. Так что главы расставлены приемлемо.
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:37  [ТС]
Цитата Сообщение от Aael Посмотреть сообщение
// Нам нужно только "нечто похожее на кошку" // и совсем пофиг на то, что это конкретно есть
что значит - Нам нужно только "нечто похожее на кошку" , если мы создаём экземпляр конкретного класса, т.е. то что конкретную кошку. содержимое же должно копироваться из конкретной кошки? а если нет, зачем тогда создавать не нечто похожее на кошку, а конкретную кошку, но нечто похожее на кошку?
0
Заблокирован
17.10.2016, 12:43
Цитата Сообщение от arh Посмотреть сообщение
что значит - Нам нужно только "нечто похожее на кошку" , если мы создаём экземпляр конкретного класса, т.е. то что конкретную кошку. содержимое же должно копироваться из конкретной кошки? а если нет, зачем тогда создавать не нечто похожее на кошку, а конкретную кошку, но нечто похожее на кошку?
Если у нас в программе класс Зоопарк, то он в себе только кошек, что ли, может содержать? Или на каждый класс животного отдельный массив заводить? Лучше сделать в нем массив из базового класса Животное. В этом массиве ссылки будут указывать хоть на кошек, хоть на жирафов. И вызвать методы "покормить", "помыть" можно для всех одинаково, не важно, какой специфичный объет там лежит на самом деле, потому что в базе такие методы объявлены.
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:50  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Если у нас в программе класс Зоопарк, то он в себе только кошек, что ли, может содержать? Или на каждый класс животного отдельный массив заводить? Лучше сделать в нем массив из базового класса Животное. В этом массиве ссылки будут указывать хоть на кошек, хоть на жирафов. И вызвать методы "покормить", "помыть" можно для всех одинаково, не важно, какой специфичный объет там лежит на самом деле, потому что в базе такой метод объявлен.
а как то проще, можно объяснить, в каких случаях нам надо делать Person p2 = new Employee , а в каких Employee p3 = new Employee
может вы в теме и вам всё просто, а вот я до конца не понял.
0
Заблокирован
17.10.2016, 12:52
Цитата Сообщение от arh Посмотреть сообщение
в каких случаях нам надо
Нет никаких надо. Все зависит от контекста задачи и от взгляда программиста на нее.
1
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:54  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Все зависит от контекта. В каких "надо" не существует.
поставил спасибо за улыбку, которую вызвал ваш ответ.. как это не существует "надо"? от чего это зависит? от того что ависит и должно определять "надо"
0
Заблокирован
17.10.2016, 12:56
Цитата Сообщение от arh Посмотреть сообщение
как это не существует "надо"? от чего это зависит?
Зависит от задачи и от того, как программист ее видит. Какие классы создавать, в принципе, и как их организовывать - это забота программиста. Тут невозможно сказать как "надо".
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 12:59  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Зависит от задачи и от того, как программист ее видит
при каких задачах надо писать Person p2 = new Employee , а в каких Employee p3 = new Employee

я уже не знаю как сформулировать вопрос по другому)
0
Заблокирован
17.10.2016, 13:01
Цитата Сообщение от arh Посмотреть сообщение
при каких задачах надо писать Person p2 = new Employee , а в каких Employee p3 = new Employee
Да, блин, это сам программист определяет, при каких задачах как ему будет удобнее сделать
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
17.10.2016, 13:02
Изучите, как вам уже сказал выше, наследование и полиморфизм. Статей море, тема не сложная. Про абстракцию тоже почитайте. Ваши вопросы вытекают из того, что вы не знаете суть использования полиморфизма.
Разжёвывать каждую мелочь вам вряд ли кто захочет
0
 Аватар для arh
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 22
17.10.2016, 13:45  [ТС]
Цитата Сообщение от sldp Посмотреть сообщение
Изучите, как вам уже сказал выше, наследование и полиморфизм. Статей море, тема не сложная. Про абстракцию тоже почитайте. Ваши вопросы вытекают из того, что вы не знаете суть использования полиморфизма.
Разжёвывать каждую мелочь вам вряд ли кто захочет
Цитата Сообщение от nimazzzy Посмотреть сообщение
Да, блин, это сам программист определяет, при каких задачах как ему будет удобнее сделать
мне тут на другом форуме ответили, что приведение к базовому типу используется для сокрытия реализации членов производного класса
это всё? неужели так нельзя было ответить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2016, 13:45
Помогаю со студенческими работами здесь

Правила создания тем в данном разделе. Читать обязательно!
Данная тема в основном ориентированна на аппаратные проблемы, такие как перегрев, сбои в работе, отказы, полная\частична...

Задайте правила эффективного использования кеша для статических объектов
Здравствуйте, подскажите мануал, как задать правила эффективного использования кеша для статических объектов. Google PageSpeed Insights ...

Разные правила в nginx для редиректов и создания ЧПУ для каждого поддомена и основного домена
Всем привет. Хочу перекинуть сайт с Апача на nginx + php-fpm Сайт только что перевел на https. Использую ISP manager, там...

Последовательность создания объектов
Подскажите пожалуйста. У меня есть класс отвечающий за загрузку данных по url и дата класс которые кушает словарь, который подгрузил класс...

Ошибка создания объектов!
Привет всем еще раз! Тут у меня при динамическом создании объектов появляеться ошибка и ссылаеться она на мой проэктный файл Project1.exe...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru