Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163

Как достать свойство объекта определенного типа, которое "обернуто" в тип object?

26.11.2014, 11:50. Показов 2660. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые Гуру!
Часто бывает удобно объекты произвольного типа представлять в виде object.
Допустим , что все объекты этих типов имеют свойство X.
Допустим entity объекта имеет тип bridge (он как и другие объекты содержит свойство X).
В окне Watch отладчика Visual Studio тип таких объектов, если не ошибаюсь, показывается как Object(bridge).

Вопрос 1.
Как достать значение свойства X у такого объекта типа object?

Вопрос 2.
В принципе, я могу определить класс текущего объекта , по его имени. Тогда, можно определить и значение свойства конкретного объекта. Но, возможно, существует более простой путь?

Спасибо.

Добавлено через 40 минут
Я сделал так:
C#
1
2
3
4
object o = SelectedObject;
Type t = o.GetType();
System.Reflection.PropertyInfo info = t.GetProperty("X");
decimal? xx = (decimal?)info.GetValue(o, null);
Может быть кто-то подскажет более простой путь?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2014, 11:50
Ответы с готовыми решениями:

Десерилизация объекта типа object в известный тип
Всем привет. Никогда бы не думал что спрошу такое , но у меня не получается :0 И так есть клиент сервер с пересылкой по шине...

Как достать объект определенного класса через Object
Такая проблема: пишу программку с графическим интерфейсом, которая сажает дерево в "саду". Проблема в том, что есть функция...

Как достать переменную из типа object?
Всем привет! У меня проблема (Я начинающий кодер): Вообщем, у меня есть массив типа object, я записал в него несколько объектов. С...

7
 Аватар для Nevermore_
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
26.11.2014, 14:01
C#
1
2
3
4
5
6
Object o=SelectedObject;
((YourClassName)o).X;
//или
(o as YourClassName).X;
//или
((YourInterfaceName)o).X;
1
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163
26.11.2014, 14:13  [ТС]
Этот метод не применить , т.к. известно только имя класса. В этом случае нужно сначала определить класс по строковому имени, затем преобразовать объект к этому типу. Но и в этом случае просто ".X" применить не удастся.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.11.2014, 14:20
Цитата Сообщение от АТерентьев Посмотреть сообщение
Часто бывает удобно объекты произвольного типа представлять в виде object.
АТерентьев, тип этих объектов известен вызывающему коду?
Если да (подключена dll или тип определен в текущей сборке) - то явным приведением.
Если нет (сторонняя сборка, о которой ничего, кроме имени сборки и имени членов неизвестно) - то только через рефлексию.

Добавлено через 3 минуты
PS. Если применять рефлексию, то при условии, что все имена заданы корректно, можно упростить задачу - использовать DLR и ключевое слово dynamic.
1
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163
26.11.2014, 14:24  [ТС]
Если не сложно , то как это будет выглядеть в коде (можно в обозначениях, которые приведены в моем блоке кода)?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.11.2014, 14:26
Цитата Сообщение от АТерентьев Посмотреть сообщение
как это будет выглядеть в коде
В смысле, использование dynamic?
0
25 / 24 / 18
Регистрация: 16.10.2009
Сообщений: 1,163
26.11.2014, 14:52  [ТС]
Так выглядит первый вариант:
C#
1
2
3
4
object o = SelectedObject;
Type t = o.GetType();
System.Reflection.PropertyInfo info = t.GetProperty("X");
decimal? xx = (decimal?)info.GetValue(o, null);
Как будет выглядеть код с использованием dynamic?
Ну это если не сложно, просто для кругозора.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.11.2014, 16:01
Лучший ответ Сообщение было отмечено АТерентьев как решение

Решение

Цитата Сообщение от АТерентьев Посмотреть сообщение
Как будет выглядеть код с использованием dynamic?
Примерно вот так. Вот код тестовой dll:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace LibraryTest {
    public class TestClass {
        public string TestProperty { get; set; }
        public TestClass() {
            TestProperty = "Property in LibraryTest";
        }
        public void TestMethod() {
            Console.WriteLine("In TestMethod!");
        }
    }
}
Вот код тестового приложения:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Reflection;
 
namespace LibraryTest_Dynamic {
    class Program {
        static void Main(string[] args) {
 
            Assembly asm = Assembly.Load("LibraryTest");
            Type testType = asm.GetType("LibraryTest.TestClass");
 
            //Используем обычную рефлексию
            object obj = Activator.CreateInstance(testType);
            MethodInfo info = testType.GetMethod("TestMethod");
            info.Invoke(obj, null);
            PropertyInfo propInfo = testType.GetProperty("TestProperty");
            Console.WriteLine("Property value is: {0}",propInfo.GetValue(obj,null));
 
 
 
            //Используем рефлексию с dynamic
            dynamic dynamicObj = Activator.CreateInstance(testType);
            dynamicObj.TestMethod();
            Console.WriteLine("Property value is: {0}", dynamicObj.TestProperty);
 
            Console.ReadLine();
        }
    }
}
Как видите, при использовании dynamic количество кода сокращается. Но есть пара моментов:
1. Нельзя ошибаться в именах.
2. С к.с. dynamic не работает IntelliSence.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2014, 16:01
Помогаю со студенческими работами здесь

Можно ли объявить переменную не как тип, а как свойство какого-либо объекта
Сегодня впервые сел за c# (по работе нужно) решил состряпать простенький калькулятор, в событии radioButton1_CheckedChanged пишу код ...

Получить свойства и методы объекта типа Object. Как?
Имеется код вида: ... Dim Tmp As Object For Each Tmp In UserControl.Controls ... Next ...Как получить методы и...

Достать тип объекта
Всем привет товарищи, есть надобность достать тип объекта. Где он находится? или есть у кого идеи, как это сделать ? Смотрите...

Приведёте пример преобразования: объекта класса в тип object ?
Кажется, я этот эксперимент уже проводил, но не помню его точно - помню, что сделал GetType() - и выяснил, что оно tuple - кортеж. ...

Сложить два объекта типа Object
В общем, есть два экземпляра класса со свойствами Object Value {get;set;} // Type ValueType {get; set;} //Типы узнаю через...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru