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

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

17.10.2016, 11:33. Показов 4103. Ответов 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
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
17.10.2016, 14:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от arh Посмотреть сообщение
мне тут на другом форуме ответили, что приведение к базовому типу используется для сокрытия реализации членов производного класса
Не уверен, что эта фраза имеет смысл, но она явно не отвечает на ваш вопрос - "Для чего что-то скрывать от пользователя?"
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
17.10.2016, 14:10
Цитата Сообщение от arh Посмотреть сообщение
это всё?
Нет

arh, Это как спрашивать: "А когда использовать молоток и гвоздь, чтоб повесить картину, а когда саморез с шуруповертом?". И приводить примеры частных случаев с просьбой объяснить. Нужно понять соль этих инструментов и тогда станет понятно причина их применения.

пс. Последнее предложение относится не к молотку с шуруповертом.
0
17.10.2016, 14:24

Не по теме:

Цитата Сообщение от arh Посмотреть сообщение
мне тут на другом форуме ответили, что приведение к базовому типу используется для сокрытия реализации членов производного класса
это всё? неужели так нельзя было ответить?
Конечно, нельзя. Это неправильный ответ потому что :)

0
 Аватар для arh
1 / 1 / 0
Регистрация: 15.11.2013
Сообщений: 49
17.10.2016, 14:36  [ТС]
Цитата Сообщение от sldp Посмотреть сообщение
Нет
для чего ещё?
Цитата Сообщение от Aael Посмотреть сообщение
"Для чего что-то скрывать от пользователя?"
это уже как бы второй вопрос, вытекающий. как я понял, когда нужны другие результаты
Цитата Сообщение от sldp Посмотреть сообщение
Это как спрашивать: "А когда использовать молоток и гвоздь, чтоб повесить картину, а когда саморез с шуруповертом?". И приводить примеры частных случаев с просьбой объяснить. Нужно понять соль этих инструментов и тогда станет понятно причина их применения.
а разве тяжело ответить когда надо использовать шуроповёрт? - для человека использующего эти инструменты не составит труда ответить (зависит от основы - материала стены, например).
я не понимаю, - это же форум, здесь спрашивают если что-то непонятно, почему же тогда так тяжело объяснить простейшие вещи - в каких случаях, конкретно вы используете приведение к базовому типу и почему...
проще пареной репы должно быть для программиста, если писать умеет. я спросил, поскольку на том ресурсе, где я изучаю сишарп, написано, что так можно делать, а зачем не написано, по результатам работы кода примера, видно что
при базовом типе результат изменённого метода скрывается без применения слова override в классе наследнике
0
Заблокирован
17.10.2016, 14:51
Цитата Сообщение от arh Посмотреть сообщение
почему же тогда так тяжело объяснить простейшие вещи - в каких случаях, конкретно вы используете приведение к базовому типу и почему...
Я тебе пример про животных написал. Это простейшая вещь. Базовый класс - Животное, специфичные - любые другие на нем базирующиеся. Например, Баран. Объект зоопарк содержит в себе массив из ссылок на базовый класс, которые на деле можгут быть любым специфичным.
Почему? Потому что животных много разных, одни приходят, другие уходят, новые появляются. Но каждый по-своему реализует базовый метод "ПроситьЕды". В программе я вызываю по ссылке на базовый класс и не парюсь о том, какой реально объект лежит в памяти.
Вот конкретный случай. Все понятно? Расходимся?

Добавлено через 8 минут
Но и для этой задачи нет "надо". Хочешь используй наследование и полиморфизм, хочешь - не используй. Невозможно найти однозначный ответ там, где его нет.
Программирование это не шуруповерт, а рисование. Нет однозначного ответа, когда взять одни краски, а когда другие. Это дело художника.

Добавлено через 2 минуты
arh, ну, или возьми этот самый классический наиклассический затасканный пример с "Фигура", наследник - Тругольни и Круг. Та же байда. Решать можно и по-другому.
0
 Аватар для arh
1 / 1 / 0
Регистрация: 15.11.2013
Сообщений: 49
17.10.2016, 14:56  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Объект зоопарк содержит в себе массив из ссылок на базовый класс, которые на деле можгут быть любым специфичным.
вы имеете в виду, что зоопарк - наследник - животное содержит, всё то, что животное или ещё плюс массив из ссылок на объекты наследники животное, такие как баран, пума, зебра и тд?
Цитата Сообщение от nimazzzy Посмотреть сообщение
Но каждый по-своему реализует базовый метод "ПроситьЕды". В программе я вызываю по ссылке на базовый класс и не парюсь о том, какой реально объект лежит в памяти.
а разве это не сокрытие реализации членов производного(ых) класса(ов)?

Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Хочешь используй наследование и полиморфизм
как я понял это надо для сокращения кода, разве нет?
0
Заблокирован
17.10.2016, 14:59
Нет, зоопарк никак не включен в иерархию животного. Он содержит в себе конктейнер ссылок на Животных.
Цитата Сообщение от arh Посмотреть сообщение
а разве это не сокрытие реализации членов производного(ых) класса(ов)?
Пхахах, сокрытие тут меня никак не волнует. И цель не сокрыть, а вызвать метод для любого животного, будь то Пума, или Олень. При чем тут выообще мыли о сокрытии? Тем более, в наследниках у меня вообще нет ничего нового, что мне скрывать-то?

Добавлено через 1 минуту
Цитата Сообщение от arh Посмотреть сообщение
как я понял это надо для сокращения кода, разве нет?
Не обязательно. Это может быть и для сокращения, и для удобства, и для красоты. Может включать и все это.
1
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
17.10.2016, 15:43
Цитата Сообщение от arh Посмотреть сообщение
при каких задачах надо писать Person p2 = new Employee , а в каких Employee p3 = new Employee
C#
1
2
3
Person p = new Person(); // когда нужен именно класс Person, с его конкретной реализацией
Person p = new Employee(); // когда нужен общий список наследников от Employee, и пофиг какая у них реализация
Employee e = new Employee(); // когда нужен конкретно базовый класс с его реализацией
1
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
17.10.2016, 15:52
Цитата Сообщение от arh Посмотреть сообщение
а разве тяжело ответить когда надо использовать шуроповёрт? - для человека использующего эти инструменты не составит труда ответить (зависит от основы - материала стены, например).
я не понимаю, - это же форум, здесь спрашивают если что-то непонятно, почему же тогда так тяжело объяснить простейшие вещи - в каких случаях, конкретно вы используете приведение к базовому типу и почему...
проще пареной репы должно быть для программиста, если писать умеет. я спросил, поскольку на том ресурсе, где я изучаю сишарп, написано, что так можно делать, а зачем не написано, по результатам работы кода примера, видно что
при базовом типе результат изменённого метода скрывается без применения слова override в классе наследнике
Вам и так все простым языком объяснили выше на примере зоопарка. И для шуруповерта только типа стены мало, есть много нюансов. Также и с ООП. Прочитайте матчасть, а конкретные недопонимания вам помогут понять. Но по вашим сообщения видно, что вы только бегло пробежались в одной статейки про полиморфизм и все. Хотя, повторюсь, материала масса. Вам дали ссылки, вы их прочитали? Уверен, что нет.

Ок, пример. Я пишу игровой движок. Обычная 2д игра. У меня есть базовый класc GameObject, есть метод Draw.
В классе движка есть коллекция объектов List<GameObject> objects. Также есть метод Update, который вызывается постоянно при перерисовке. В нем мы ко всему прочему проходимся по списку objects и вызываем метод Draw.
Все просто, все работает. Но! Нам нужно создавать другие объекты, например, игрок, твердое тело, монета и т.п.. В итоге нам бы пришлось иметь отдельно списки всех этих типов и по ним проходиться вызывая Draw. Но с помощью наследования мы можем писать так:
C#
1
2
3
var objects = new List<GameObject>(); 
objects.Add(new Player()); 
objects.Add(new RigidBody();// апкаст к базовому типу
Так же в GameObject, например, у нас есть метод, void Сollision(GameObject obj), который вызывается при столкновении объектов. Мы так же в методе Update проходимся по всему списку objects и "где надо" вызываем этот метод.
Но он будет разным для каждого типа объектов, по этому мы его переопределяем при описании классов игрока, земли и т.п..
И теперь, когда мы вызываем метод Сollision у типа GameObject, к которому мы приводили наши новые типы при добавлении в список objects, вызовется уже переопределенный новый метод.

Так же класс GameObject должен быть абстрактным (выше уже советовал почитал об абстракции) и содержать абстрактные методы Draw и Сollision.

Пример теоретический , на практике граф наследования стоило бы сделать куда длиннее и витиеватее. Да и сам подход к движку не лучший. Это я к тому, вдруг кто решит на основе этого что-то писать
1
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
17.10.2016, 17:22
xxx: а вот думаете почему программисты разные носки надевают? а не потому что неряшливые, а потому что разных типов, а наследуются все равно от одного класса
Баш, 412949.

Отсюда вывод - хоть носки и разные, но объявлены базовым классом, значит, их оба можно одеть на ноги. А не на руки, как варежки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2016, 17:22

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru