Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
12 / 11 / 1
Регистрация: 20.01.2018
Сообщений: 76
.NET 4.x

Рефлексия - объясните, что происходит

25.02.2018, 15:07. Показов 2244. Ответов 31

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые знатоки.
Имеем код:
C#
1
2
3
4
Type type = Type.GetType("TrOperMov.Model.mTrOperMov"); // получаем метаописание типа объекта
ConstructorInfo[] constrs= type.GetConstructors();      // получаем конструктора объекта
var constr = constrs[0];                                // получаем конструктор 
var obj = constr.Invoke(null);                          // Вызываем конструктор, получаем объект
Внимание, вопрос. Какой у объекта тип?

Ха-ха, скажете вы. Конструктор всегда возвращает объект, и в нашем случае это экземпляр класса mTrOperMov.
Однако, в отладчике я наблюдаю такую картину:

C#
1
2
3
Имя              Значение                        Тип
obj             {TrOperMov.Model.mTrOperMov}    object {TrOperMov.Model.mTrOperMov}
(mTrOperMov)obj {TrOperMov.Model.mTrOperMov}    TrOperMov.Model.mTrOperMov
Т.е. тип объекта object {TrOperMov.Model.mTrOperMov}, а должен быть TrOperMov.Model.mTrOperMov

Как получить нужный тип (TrOperMov.Model.mTrOperMov), используя рефлексию???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2018, 15:07
Ответы с готовыми решениями:

Объясните, что происходит в части кода
Алгоритм сортировки простым слиянием Шаг 1. Исходный файл A разбивается на два вспомогательных файла B и C. Шаг 2. Вспомогательные...

Объясните принцип действия foreach: что происходит с переменными
Интересует такой вопрос - когда мы пишем что то наподобее foreach(var a in results), можем ли мы через переменную "a" изменять...

пожалуйста, объясните что происходит в каждой строчке программы
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; /*Структура для хранения...

31
Эксперт .NET
 Аватар для Usaga
14577 / 9479 / 1360
Регистрация: 21.01.2016
Сообщений: 35,759
27.02.2018, 13:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _Ramzay Посмотреть сообщение
так не работает
Естественно. Тут нужно приведение, ибо тип ссылки не соответствует тому, что ожидается методом. При этом методу пофигу, что за ссылкой неверного типа стоит совершенно правильный объект, он об этом знать не может и не должен.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18355 / 14281 / 5370
Регистрация: 17.03.2014
Сообщений: 28,963
Записей в блоге: 1
27.02.2018, 13:36
_Ramzay, не работает или не компилируется? Если не работает, то может у Ok разные перегрузки, которые делают разные вещи?
0
12 / 11 / 1
Регистрация: 20.01.2018
Сообщений: 76
27.02.2018, 14:08  [ТС]
C#
1
2
3
public class A {public string B {get; set;}}
...
var a=new A();
Это что же получается, переменная a хранит в себе тип объекта A и еще имеет тип переменной (т.е. тип самой себя)? Чему же тогда равен тип переменной в этом случае? Какие бывают типы переменных?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.02.2018, 14:22
Цитата Сообщение от _Ramzay Посмотреть сообщение
Это что же получается, переменная a хранит в себе тип объекта A и еще имеет тип переменной (т.е. тип самой себя)
Переменная а хранит в себе ссылку на экземпляр типа А.

Цитата Сообщение от _Ramzay Посмотреть сообщение
Чему же тогда равен тип переменной в этом случае?
Тип переменной а — А.

Цитата Сообщение от _Ramzay Посмотреть сообщение
Какие бывают типы переменных?
Любые.
Переменная — это хранилище.
В строго типизированных языках, к которым принадлежит и C#, в каждом хранилище может содержаться только определенный тип данных, т.е. у каждой переменной есть один неизменный тип, определяющий что в ней может храниться.
При этом переменные есть двух видов: ссылочные и значимые. В переменных значимых типов хранится непосредственно значение (экземпляр), а в переменных ссылочных типов хранится только ссылка на значение (экземпляр).
1
Эксперт .NET
 Аватар для Usaga
14577 / 9479 / 1360
Регистрация: 21.01.2016
Сообщений: 35,759
27.02.2018, 14:23
_Ramzay, у переменной есть ТИП, переменная может ссылать на объект, который тоже имеет ТИП наследуемый от типа переменной:

C#
1
object a = "Hello";
Тип переменной - object, ссылается на объект типа string, который наследуется от object.

Вариант с var то же, что и выше, но с определением типа силами компилятора.
1
12 / 11 / 1
Регистрация: 20.01.2018
Сообщений: 76
27.02.2018, 14:25  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
_Ramzay, не работает или не компилируется? Если не работает, то может у Ok разные перегрузки, которые делают разные вещи?
Компилируется, но не работает. Перезагрузка есть Ok(), но она вообще ничего не возвращает (ошибок не выдает).
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18355 / 14281 / 5370
Регистрация: 17.03.2014
Сообщений: 28,963
Записей в блоге: 1
27.02.2018, 14:27
Цитата Сообщение от _Ramzay Посмотреть сообщение
Перезагрузка есть Ok(), но она вообще ничего не возвращает (ошибок не выдает).
А делают они одно и тоже или все-таки разное?
0
12 / 11 / 1
Регистрация: 20.01.2018
Сообщений: 76
27.02.2018, 15:39  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
А делают они одно и тоже или все-таки разное?
Ok() - возвращает пустой положительный ответ, Ok(Model) - возвращает ответ с данными
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18355 / 14281 / 5370
Регистрация: 17.03.2014
Сообщений: 28,963
Записей в блоге: 1
27.02.2018, 15:48
_Ramzay, я имел в виду реализацию методов. Чем она отличается?
0
12 / 11 / 1
Регистрация: 20.01.2018
Сообщений: 76
27.02.2018, 17:02  [ТС]
Если мы пишем
C#
1
object a="ttt";
получаем тип object {string}Я так понимаю что тип переменной "а" (экземпляра объекта object), будет object, но объект хранит в себе значение типа string.
Иными словами a имеет какую-то такую структуру:
C#
1
2
3
4
5
public class object
{
string Type; // тип хранимого значения
string Value; // текстовое представление хранимого значения
}
и наша переменная будет иметь свойства Type="string", Value="ttt"
Если a=1; то Type="int", Value="1"
Если a=new Model(); Model=...; то Type="Model", Value="модель, сериализированая в xml (например)"
и т.д.

Правильно я понимаю смысл термина "тип переменной"?

Добавлено через 35 секунд
Цитата Сообщение от OwenGlendower Посмотреть сообщение
_Ramzay, я имел в виду реализацию методов. Чем она отличается?
реализация мне не ведома
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.02.2018, 17:05
Цитата Сообщение от _Ramzay Посмотреть сообщение
получаем тип object
Надо различать понятия "тип объекта" и "тип ссылки на объект". В вашем случае тип объекта - string, а вот тип ссылки на этот объект - object. Таким образом, с использованием данной ссылки мы можем использовать только те методы, что определены для данного типа (т.е. object, но не string).
1
Эксперт .NET
 Аватар для Usaga
14577 / 9479 / 1360
Регистрация: 21.01.2016
Сообщений: 35,759
27.02.2018, 17:34
Цитата Сообщение от _Ramzay Посмотреть сообщение
Правильно я понимаю смысл термина "тип переменной"?
Вообще ниразу.

Тип ссылки - тип, на который ссылке разрешено указывать. А тип самого объекта к ссылке особого отношения не имеет, так как может вообще не быть ссылки (объект готов к сборке мусора). Строка (string) - это объект (object), поэтому ссылка типа object может ссылаться на строку (да и вообще на любой объект).

Технически, ссылка - указатель, просто 4 или 8 байт с адресом объекта. Ссылка не обладает какой-то метаинформацией или чем-то таким. За её использованием следит компилятор и CLR.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2018, 17:34

Рефлексия: как происходит приведение из object в производные классы и структуры
Объясните пожалуйста, даю кусок кода из книги Шилдта + 1-2 метода дописанных самостоятельно: using System; using System.Reflection;...

Рефлексия. Узнать, что тип свойства наследуется от ViewModelBase
Вот по-быстрому набросал что-то. Я погуглю ещё, почитаю, но мало ли быстрее кто поможет, не хотелось бы на это много времени тратить, если...

Объясните, как происходит создание объекта
Объясните мне идиоту вот например я создаю объект cat Pawel = new cat(); здесь слева создается переменная типа cat имя которой Pawel....

Что здесь происходит?
Подскажите пожалуйста, что происходит в цикле. Так же интересует что такое 0x00000000000000ff for (int i = 8; i > 0;...

Что происходит при A = this
Господа, есть такой вот говнокод using System; class a { public int Value() { return 45; } } class b...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru