Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
1

Как получить значение статического свойства класса через его объект?

23.07.2020, 00:52. Показов 3530. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как получить значение статического свойства класса через его объект?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2020, 00:52
Ответы с готовыми решениями:

Получить объект и умножить все его численные свойства на заданное значение
Создайте функцию multiplyNumeric, которая получает объект и умножает все численные свойства на...

Как получить значение свойства по его имени (строка) ?
Помогите написать функцию, возвращающую значение свойства объекта по его имени (строчному...

Получить значение свойства класса
Здравствуйте, Чет я немного зависла. Есть класс. В нем одно свойство и один метод. На форме...

Получить значение свойства из другого класса
Здравствуйте. Скорее всего мой вопрос не очень сложен. Однако, я не смог найти ответа с помощью...

40
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
24.07.2020, 11:53 21
Author24 — интернет-сервис помощи студентам
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 так можно делать, как думаете, что делает этот код?
Java
1
2
3
Thread t = new Thread(...);
t.start();
t.sleep(1000);
0
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
24.07.2020, 12:43  [ТС] 24
Цитата Сообщение от КОП Посмотреть сообщение
titan4ik, а что делать, если оба класса в иерархии имеют статическое поле с одинаковым названием?
Вы имеете ввиду класс-родитель и класс потомок при наследовании?
Вопорос сокрытия поля (свойства, метода) родителя он же как-то решается в отношении нестатических полей. Могли бы решить и в отношении статических - это же всё предмет договоренностей на основе принципов, по которым строится язык.
Цитата Сообщение от КОП Посмотреть сообщение
кстати в java так можно делать, как думаете, что делает этот код?
КОП,
я и c# толком не знаю, а тут ещё java - ну там, видать, поток создается, запускается, а потом его сразу приостанавливают (усыпляют) на 1000 мс, наверное так.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
24.07.2020, 12:51 25
Цитата Сообщение от titan4ik Посмотреть сообщение
Я о тех возможностях, которые могли бы быть у языка (с моей точки зрения, как наивного потребителя всей этой кухни) и которых почему-то нет.
По поводу "почему-то нет" все ясно: функционал стоит времени и денег. Для того, чтобы он появился, такой функционал должен быть либо дешевым, либо лучше остального потенциального функционала.
На данный момент язык является открытым — зайдите на гитхаб и предложите новый функционал.
А еще лучше — реализуйте сами и отправьте Pull Request.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
24.07.2020, 15:39 26
Цитата Сообщение от titan4ik Посмотреть сообщение
Могли бы
Если чего то в языке не реализовано, это не значит, что это и не рассматривали. Если фича вызывает больше вопросов, чем решает, если ее реализация связана с какими то техническими сложностями, если она обладает сомнительной полезностью, то и реализовывать ее не будут.
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
Цитата Сообщение от kolorotur Посмотреть сообщение
Если хотите фильтровать по типу, то лучше используйте оператор is вместо GetType.
Но оператор is выдаст true в случае совместимости типов (возможности приведения типов), а не в случае их идентичности.
оператор is проверяет, совместим ли тип среды выполнения для определенного выражения с указанным типом;
https://docs.microsoft.com/ru-... g-and-cast
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.07.2020, 15:48 29
Цитата Сообщение от titan4ik Посмотреть сообщение
Но оператор is выдаст true в случае совместимости типов
Да, и это правильно.
Иначе при каждом наследовании вам придется менять все места проверок.
0
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
31.07.2020, 15:50  [ТС] 30
Вот тут в примере как раз растолковано
https://docs.microsoft.com/ru-... f-operator

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Да, и это правильно.
ОК. Просто я держал в уме задачу, для которой это не правильно)
В ней как раз важно различать потомков одного родительского класса.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
31.07.2020, 16:46 31
Цитата Сообщение от titan4ik Посмотреть сообщение
В ней как раз важно различать потомков одного родительского класса.
Так и сравнивайте тогда через is с дочерним классом, а не с родительским.
1
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
31.07.2020, 16:57  [ТС] 32
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Так и сравнивайте тогда через is с дочерним классом, а не с родительским.
Идею понял.
Только нужно учитывать, что если ситуация с наследованием чуток посложнее, то будет целый ряд совпадений. Из них, выходит, нужно выбрать самого отдаленного потомка.
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
Цитата Сообщение от QuakerRUS Посмотреть сообщение
предположим есть
ОК, это понятно.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.07.2020, 17:08 35
Цитата Сообщение от titan4ik Посмотреть сообщение
В ней как раз важно различать потомков одного родительского класса.
До любого уровня?
Подозреваю, что в выбранном вами подходе что-то не так, т.к. в текущей реализации код очень быстро станет неподдерживаемым.
1
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
31.07.2020, 17:16  [ТС] 36
Цитата Сообщение от kolorotur Посмотреть сообщение
в текущей реализации код очень быстро станет неподдерживаемым.
Более того - он уже слабо написуем)))
Сама задача в ее данной текущей конкретике простая и ее можно было легко решить в лоб, но захотел сделать "красиво и правильно" в общем виде - на будущее - и совсем запутался.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.07.2020, 17:17 37
Цитата Сообщение от titan4ik Посмотреть сообщение
захотел сделать "красиво и правильно" в общем виде
Тогда лучше сразу забыть о проверке на конкретный тип — это прямо противоречит "красиво и правильно"
1
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
31.07.2020, 17:21  [ТС] 38
Цитата Сообщение от kolorotur Посмотреть сообщение
Тогда лучше сразу забыть о проверке на конкретный тип — это прямо противоречит "красиво и правильно"
Упс...
Это необходимо принять к сведению.
Я ещё немножко покувыркаюсь, и если не получится, постараюсь сформулировать в новой теме конкретную задачу.

Добавлено через 1 минуту
В общем виде.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
31.07.2020, 17:37 39
Если наследник должен иметь свое поведение, то можно добавить в базовый класс виртуальный или абстрактный метод и перегрузить его в потомках.

Если наследник должен иметь свои данные, то можно добавить в базовый класс виртуальное или абстрактное свойство и перегрузить его в потомках.

Напрямую с типами работать не придется.

Добавлено через 14 минут
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Можно сделать тогда такое наследование: базовый класс - подкласс(по 5) - дочерний(по 1)
titan4ik, также не стоит забывать и про интерфейсы. Если необходимости увеличивать цепочку наследования нет, то можно группировать часть наследников по интерфейсу и проверять на наличие интерфейса через тот же is.
1
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,021
31.07.2020, 17:52  [ТС] 40
Отлить в граните и занести в скрижали:
"лучше сразу забыть о проверке на конкретный тип — это прямо противоречит "красиво и правильно""
0
31.07.2020, 17:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2020, 17:52
Помогаю со студенческими работами здесь

Получить значение свойства класса который находится выше
Возможно не правильно формулирую вопрос, поэтому гугл и не помогает... Для примера есть 3 класса ...

Как получить значения статического поля класса с помощью рефлексии?
Есть библиотека классов в ней некоторый класс А. у этого класса есть статическое поле - его ID....

Замена статического класса на объект-синглтон приводит к отказу работать
Здравствуйте. В общем, ситуация простая: имею статический класс. Решил переделать его, чтобы был...

Получить адрес не статического метода класса
Можно ли получить адресс не статического метода класса (статического можно - пробовал).

Рефлексия, получить содержание поля статического класса
static class Messange { public static readonly string mes = "Привет"; ...

Как объявить объект класса, не создавая его?
Нужно объявить объект класса, но чтобы при этом не вызывался конструктор? Просто потом хочу его...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru