|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
||||||
Как обратиться из конструктора базового абстрактного класса к свойству-массиву класса наследника04.03.2018, 23:02. Показов 4063. Ответов 5
Метки нет (Все метки)
Добрый день.
Подскажите как обратиться из конструктора базового абстрактного класса к свойству-массиву из класса наследника. Вроде бы побычный downcast, но что-то не нравиться, почему-то возвращает int вместо string, пишет: Cannot implicitly convert type "int" to "string". Цель: Есть абстрактный класс Сharacter, есть класс наследник Enemy : Сharacter, при создании екземпляра класса Enemy, должен вызываться конструктор базового класса, а тот в свою очередь, должен обращаться к статическому свойству класса наследника, содердащего массив с именами, и автоматически присваивать случайное имя. Помогите оформить код корректно, может чего не так делаю. Подскажите правильное решение, только не как проще, а как нужно, так как сделать поще могу сам, хочу обрести понимание правильно ли вообще такой downcast делать и как делать его правильно или вообще без него нужно. Заранее спасибо.
0
|
||||||
| 04.03.2018, 23:02 | |
|
Ответы с готовыми решениями:
5
Вызов конструктора базового класса из класса-наследника Вызов конструктора абстрактного базового класса Как сделать явное приведения переменной типа класса-наследника к типу базового класса? |
|
5 / 4 / 2
Регистрация: 03.03.2018
Сообщений: 19
|
||||||
| 04.03.2018, 23:21 | ||||||
Сообщение было отмечено Alone11 как решение
РешениеName = rnd.Next(0,Enemy.EnemyFirstNames.Length); - у вас здесь рандомится int'овое числочтобы рандомилось имя из массива нужно писать:
0
|
||||||
|
26 / 24 / 17
Регистрация: 10.01.2018
Сообщений: 66
|
|
| 04.03.2018, 23:32 | |
|
Вообще, очень странно и непонятно.
У вас объект Enemy хранит список всех возможных имен. Нелогично, как по мне. Можно создать дополнительный клас, который будет хранить имена. Добавлено через 3 минуты И еще вы жестко связали базовый клас и наследника. Если вы создадите еще один клас наследника, что тогда? Добавлено через 3 минуты И зачем инициализировать статическое поле в нестатическом конструкторе?
1
|
|
|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
|
| 05.03.2018, 00:22 [ТС] | |
|
Di_Romero , огромное спасибо за ответ. Буду знать как это делается.
KIKO KUTS , Да наверное стоит создать отдельный класс для хранения имен. И еще вы жестко связали базовый клас и наследника. Если вы создадите еще один клас наследника, что тогда? От класса Enemy не планировал делать наследника, идея в том, что от от базового класса Character идет распаралеленное наследование Hero: Character и Enemy : Character. При сосздании экземпляра класса вызывается один из базовых конструкторов класса, если коснструктор по умолчанию то это враг, и поле name заполняется именами автоматически, если Hero то передается значение. И зачем инициализировать статическое поле в нестатическом конструкторе? Подскажите как лучше, что не так с кодом, для чего именно нужно статическое поле именно в статическом конструкторе инициализировать, разве статический конструктор не выполняется один раз при создании экзепляра класса, и только после этого выполнение предается на другие конструкторы? ps. Опыта нет, учу C#, готовлюсь к собеседованиям, шишок еще не на бил, для тренировки делаю свою игрушку. Прошу обяснить как лучше и почему.
0
|
|
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|||
| 05.03.2018, 00:59 | |||
|
ответь на вопрос, не нам всем, а себе, чем отличаются
ничем, ну так штампуй героев, для юзера с введенным именем и в один "массив", для "врага" с рандомным и в другой... или я что-то не так понял?
0
|
|||
|
26 / 24 / 17
Регистрация: 10.01.2018
Сообщений: 66
|
||||||||||||||||||||||||||
| 05.03.2018, 16:56 | ||||||||||||||||||||||||||
Сообщение было отмечено Alone11 как решение
Решение
Статический коструктор нужен для того, чтобы инициализировать статические поля. Такое его назначение.
К статическому полю вы можете обратиться, не создавая экземпляра. А вы попробуйте обратиться к EnemyFirstNames перед созданием объекта Enemy. Ничего не сработает ![]() Вы правы, статический коструктор отрабатывает только один раз. А нам это и нужно. Зачем переприсваиваивать переменной EnemyFirstNames одно и тоже значение каждый раз, когда создаем новый объект? Разве в этом есть смысл? Про наследование: Я говорил про наследование от класа Character. Дело в том, что он связан с классом Enemy. Вызывать разные конструкторы в заввисимости от того, кто наследник? Это глупо, извините) Базововому класу не нужно знать о его потомках как минимум потому, что при добавлении нового потомка нужно будет менять и базовый клас.
Насколько я понял, герою мы передаем имя (наверное, игрок вводит?), соответственно у него есть конструктор с одним параметром.
Ну и метод мейн приложу, который можно попробовать:
1
|
||||||||||||||||||||||||||
| 05.03.2018, 16:56 | |
|
Помогаю со студенческими работами здесь
6
Создание экземпляра класса-наследника для переменной с типом базового класса Вызов переопределенного метода класса наследника из базового класса
Как достучатся до полей и методов наследника абстрактного класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|