|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
||||||
Как обратиться из конструктора базового абстрактного класса к свойству-массиву класса наследника04.03.2018, 23:02. Показов 4012. Ответов 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
Создание экземпляра класса-наследника для переменной с типом базового класса Вызов переопределенного метода класса наследника из базового класса
Как достучатся до полей и методов наследника абстрактного класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 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 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|