|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
||||||
Как обратиться из конструктора базового абстрактного класса к свойству-массиву класса наследника04.03.2018, 23:02. Показов 4014. Ответов 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
Создание экземпляра класса-наследника для переменной с типом базового класса Вызов переопределенного метода класса наследника из базового класса
Как достучатся до полей и методов наследника абстрактного класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|