539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
1 | |
Как получить значение статического свойства класса через его объект?23.07.2020, 00:52. Показов 3530. Ответов 40
Метки нет (Все метки)
0
|
23.07.2020, 00:52 | |
Ответы с готовыми решениями:
40
Получить объект и умножить все его численные свойства на заданное значение Как получить значение свойства по его имени (строка) ? Получить значение свойства класса Получить значение свойства из другого класса |
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
24.07.2020, 11:53 | 21 |
titan4ik, компилятору-то откуда знать тип любого объекта?
Среда выполнения - да, знает, а компилятор - нет.
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
24.07.2020, 12:22 [ТС] | 22 |
kolorotur,
я человек маленький) Пусть компилятор сам разбирается со средой исполнения - у них один творец. Я о тех возможностях, которые могли бы быть у языка (с моей точки зрения, как наивного потребителя всей этой кухни) и которых почему-то нет. Вероятно вы знаете почему. А мне это понять не дано)
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
24.07.2020, 12:31 | 23 | |||||
titan4ik, а что делать, если оба класса в иерархии имеют статическое поле с одинаковым названием? брать базовое или производное? А если у нас переменная базового типа ссылается на производный, то какое брать?
кстати в java так можно делать, как думаете, что делает этот код?
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
24.07.2020, 12:43 [ТС] | 24 |
Вы имеете ввиду класс-родитель и класс потомок при наследовании?
Вопорос сокрытия поля (свойства, метода) родителя он же как-то решается в отношении нестатических полей. Могли бы решить и в отношении статических - это же всё предмет договоренностей на основе принципов, по которым строится язык. КОП, я и c# толком не знаю, а тут ещё java - ну там, видать, поток создается, запускается, а потом его сразу приостанавливают (усыпляют) на 1000 мс, наверное так.
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
24.07.2020, 12:51 | 25 |
По поводу "почему-то нет" все ясно: функционал стоит времени и денег. Для того, чтобы он появился, такой функционал должен быть либо дешевым, либо лучше остального потенциального функционала.
На данный момент язык является открытым — зайдите на гитхаб и предложите новый функционал. А еще лучше — реализуйте сами и отправьте Pull Request.
0
|
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
|
|
24.07.2020, 15:39 | 26 |
Если чего то в языке не реализовано, это не значит, что это и не рассматривали. Если фича вызывает больше вопросов, чем решает, если ее реализация связана с какими то техническими сложностями, если она обладает сомнительной полезностью, то и реализовывать ее не будут.
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
24.07.2020, 15:47 [ТС] | 27 |
По поводу темы я уже всё сказал,
а вот судя по отличиям версии 8.0 от 7.3, видать, много чего пересмотрели из того, что ранее считали не нужным. Жаль, что для .Net Framework версия 7.3 будет последней.
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 15:42 [ТС] | 28 |
Но оператор is выдаст true в случае совместимости типов (возможности приведения типов), а не в случае их идентичности.
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
31.07.2020, 15:48 | 29 |
Да, и это правильно.
Иначе при каждом наследовании вам придется менять все места проверок.
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 15:50 [ТС] | 30 |
Вот тут в примере как раз растолковано
https://docs.microsoft.com/ru-... f-operator Добавлено через 1 минуту ОК. Просто я держал в уме задачу, для которой это не правильно) В ней как раз важно различать потомков одного родительского класса.
0
|
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
|
|
31.07.2020, 16:46 | 31 |
1
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 16:57 [ТС] | 32 |
Идею понял.
Только нужно учитывать, что если ситуация с наследованием чуток посложнее, то будет целый ряд совпадений. Из них, выходит, нужно выбрать самого отдаленного потомка.
0
|
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
|
|
31.07.2020, 17:02 | 33 |
titan4ik, предположим есть базовый класс, в котором 10 наследников, из которых нужно вычленить 5. Можно сделать тогда такое наследование: базовый класс - подкласс(по 5) - дочерний(по 1). Сравниваем через is с подклассом(по 5).
0
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 17:05 [ТС] | 34 |
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
31.07.2020, 17:08 | 35 |
До любого уровня?
Подозреваю, что в выбранном вами подходе что-то не так, т.к. в текущей реализации код очень быстро станет неподдерживаемым.
1
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 17:16 [ТС] | 36 |
Более того - он уже слабо написуем)))
Сама задача в ее данной текущей конкретике простая и ее можно было легко решить в лоб, но захотел сделать "красиво и правильно" в общем виде - на будущее - и совсем запутался.
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
31.07.2020, 17:17 | 37 |
Тогда лучше сразу забыть о проверке на конкретный тип — это прямо противоречит "красиво и правильно"
1
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 17:21 [ТС] | 38 |
Упс...
Это необходимо принять к сведению. Я ещё немножко покувыркаюсь, и если не получится, постараюсь сформулировать в новой теме конкретную задачу. Добавлено через 1 минуту В общем виде.
0
|
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
|
|
31.07.2020, 17:37 | 39 |
Если наследник должен иметь свое поведение, то можно добавить в базовый класс виртуальный или абстрактный метод и перегрузить его в потомках.
Если наследник должен иметь свои данные, то можно добавить в базовый класс виртуальное или абстрактное свойство и перегрузить его в потомках. Напрямую с типами работать не придется. Добавлено через 14 минут titan4ik, также не стоит забывать и про интерфейсы. Если необходимости увеличивать цепочку наследования нет, то можно группировать часть наследников по интерфейсу и проверять на наличие интерфейса через тот же is .
1
|
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
|
|
31.07.2020, 17:52 [ТС] | 40 |
Отлить в граните и занести в скрижали:
"лучше сразу забыть о проверке на конкретный тип — это прямо противоречит "красиво и правильно""
0
|
31.07.2020, 17:52 | |
31.07.2020, 17:52 | |
Помогаю со студенческими работами здесь
40
Получить значение свойства класса который находится выше Как получить значения статического поля класса с помощью рефлексии? Замена статического класса на объект-синглтон приводит к отказу работать Получить адрес не статического метода класса Рефлексия, получить содержание поля статического класса Как объявить объект класса, не создавая его? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |