Рефлексия. Лекция 4

Содержание

Слайд 2

Рефлексия

Механизм рефлексии. Аннотации. Методы, реализующие рефлексию.

Рефлексия Механизм рефлексии. Аннотации. Методы, реализующие рефлексию.

Слайд 3

Обзор литературы

https://www.nookery.ru/understand-with-reflection/
https://metanit.com/sharp/tutorial/14.1.php
https://www.youtube.com/watch?v=vN6OXGQM1ac
https://www.youtube.com/watch?v=i2W2wA-Udro
https://blog.rc21net.ru/рефлексия-отражение-reflection-в-c-sharp/

Обзор литературы https://www.nookery.ru/understand-with-reflection/ https://metanit.com/sharp/tutorial/14.1.php https://www.youtube.com/watch?v=vN6OXGQM1ac https://www.youtube.com/watch?v=i2W2wA-Udro https://blog.rc21net.ru/рефлексия-отражение-reflection-в-c-sharp/

Слайд 4

Атрибуты

https://www.youtube.com/watch?v=i2W2wA-Udro
https://www.youtube.com/watch?v=4m3nAAekpdc

Атрибуты https://www.youtube.com/watch?v=i2W2wA-Udro https://www.youtube.com/watch?v=4m3nAAekpdc

Слайд 5

Программа для декомпиляции

https://www.jetbrains.com/ru-ru/decompiler/
JetBrains.dotPeek.2020.3.3.web.exe (Бесплатная)

Программа для декомпиляции https://www.jetbrains.com/ru-ru/decompiler/ JetBrains.dotPeek.2020.3.3.web.exe (Бесплатная)

Слайд 6

Рефлексия

Reflection (Отражение)

https://www.youtube.com/watch?v=i2W2wA-Udro

Отражение (англ. reflection) — процесс, во время которого программа может отслеживать и модифицировать собственную структуру

Рефлексия Reflection (Отражение) https://www.youtube.com/watch?v=i2W2wA-Udro Отражение (англ. reflection) — процесс, во время которого
и поведение во время выполнения. Парадигма программирования, положенная в основу отражения, является одной из форм метапрограммирования.

https://ru.wikipedia.org/wiki/Отражение_(программирование)

Слайд 7

Манифест (Метаданные сборки) состоят из описания сборки: имя, версия, строгое имя, информация

Манифест (Метаданные сборки) состоят из описания сборки: имя, версия, строгое имя, информация
о культуре.
Метаданные (Метаданные типов) включают пространство имен и имя типа, члены типа и параметры, если имеются.
Ресурсы (Resources) – это объекты, которые используются кодом: строки, изображения, различные файлы.

Рефлексия

Слайд 8

Байт-код (псевдокод)—машинно – независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором.

Байт-код (псевдокод)—машинно – независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором.
Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.
Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти.

Рефлексия

http://www.devowl.net/2017/05/byte-code-csharp-execution-shellcode.html

Слайд 9

Рефлексия

System.Reflection

https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection?view=netframework-4.8

System.Reflection – пространство имен, которое содержит классы для применения рефлексии в языкеC#.

https://www.youtube.com/watch?v=vN6OXGQM1ac

Рефлексия System.Reflection https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection?view=netframework-4.8 System.Reflection – пространство имен, которое содержит классы для применения рефлексии в языкеC#. https://www.youtube.com/watch?v=vN6OXGQM1ac

Слайд 10

Рефлексия

Класс Type

Type является корневым классом для функциональных возможностей рефлексиии основным способом доступа

Рефлексия Класс Type Type является корневым классом для функциональных возможностей рефлексиии основным
к метаданным.
С помощью членов класса Type можно получить сведения об объявленных в типе элементах: конструкторах, методах, полях, свойствах и событиях класса, а также о модуле и сборке, в которых развернут данный класс.

https://www.youtube.com/watch?v=vN6OXGQM1ac

Слайд 11

Рефлексия

Класс Type

1.Вызов метода GetType()на экземпляре требуемого класса.
2.Вызов статического метода GetType() класса Type.
3.Использование

Рефлексия Класс Type 1.Вызов метода GetType()на экземпляре требуемого класса. 2.Вызов статического метода
оператора typeof().

https://www.youtube.com/watch?v=vN6OXGQM1ac

Способы получения экземпляра

Слайд 12

Рефлексия

Класс Assembly

Класс Assembly представляет собой сборку, которая является модулем с возможностью многократного

Рефлексия Класс Assembly Класс Assembly представляет собой сборку, которая является модулем с
использования, поддержкой версий и встроенным механизмом описания общеязыковой исполняющей среды.

https://www.youtube.com/watch?v=vN6OXGQM1ac

Слайд 13

Рефлексия

Класс Activator

Класс Activator содержит методы для локального создания типов объектов.
Метод CreateInstance() создает

Рефлексия Класс Activator Класс Activator содержит методы для локального создания типов объектов.
экземпляр типа, определенного в сборке путем вызова конструктора, который наилучшим образом соответствует заданным аргументам.

https://www.youtube.com/watch?v=vN6OXGQM1ac

Слайд 14

Рефлексия

Reflection (Отражение)

https://www.youtube.com/watch?v=i2W2wA-Udro

Отражение (англ. reflection) — процесс, во время которого программа может отслеживать и модифицировать собственную структуру

Рефлексия Reflection (Отражение) https://www.youtube.com/watch?v=i2W2wA-Udro Отражение (англ. reflection) — процесс, во время которого
и поведение во время выполнения. Парадигма программирования, положенная в основу отражения, является одной из форм метапрограммирования.

https://ru.wikipedia.org/wiki/Отражение_(программирование)

Слайд 15

Пример 1

https://www.youtube.com/watch?v=i2W2wA-Udro

Пример 1 https://www.youtube.com/watch?v=i2W2wA-Udro

Слайд 16

Пример 1

Свойства

https://www.youtube.com/watch?v=i2W2wA-Udro

Конструктор класса

4 стандартных метода, являющимся общими для всех типов данных

Индексаторы get,

Пример 1 Свойства https://www.youtube.com/watch?v=i2W2wA-Udro Конструктор класса 4 стандартных метода, являющимся общими для
set

Слайд 17

Метод GetType

Метод GetType – возвращает текущий Type.

https://docs.microsoft.com/ru-ru/dotnet/api/system.type.gettype?view=netframework-4.8#System_Type_GetType

Возвращаемое значение
Type Тип с указанным именем,

Метод GetType Метод GetType – возвращает текущий Type. https://docs.microsoft.com/ru-ru/dotnet/api/system.type.gettype?view=netframework-4.8#System_Type_GetType Возвращаемое значение Type
если он существует;
в противном случае — значение null.

Слайд 18

Метод GetMembers

Метод GetMembers – получает члены (свойства, методы, поля, события и т.

Метод GetMembers Метод GetMembers – получает члены (свойства, методы, поля, события и
д.) текущего объекта Type.

https://docs.microsoft.com/ru-ru/dotnet/api/system.type.getmembers?view=netframework-4.8#System_Type_GetMembers_System_Reflection_BindingFlags_

Массив объектов MemberInfo, представляющий все открытые члены текущего типа Type.
-или- Пустой массив типа  MemberInfo, если у текущего типа  Type нет открытых членов.

Слайд 19

Пример 2

https://www.youtube.com/watch?v=i2W2wA-Udro

Добавим в метод GetMembers, два флага
NonPublic - все непубличные
Instance - выбираем

Пример 2 https://www.youtube.com/watch?v=i2W2wA-Udro Добавим в метод GetMembers, два флага NonPublic - все
не статичные элементы, а типы которые представляют собой экземплярные элементы

BindingFlags Для определения элементов, включаемых в поиск, можно использовать следующие флаги фильтра:
Укажите BindingFlags.Instance, чтобы включить методы экземпляра.
Укажите BindingFlags.Static, чтобы включить статические методы.
Укажите BindingFlags.Public, чтобы включить в поиск открытые методы.
Укажите BindingFlags.NonPublic для включения в поиск неоткрытых методов (т. е. закрытых, внутренних и защищенных методов). Возвращаются только защищенные и внутренние методы базовых классов. закрытые методы в базовых классах не возвращаются.
Укажите, BindingFlags.FlattenHierarchy следует public ли включать и protected статические элементы вверх по иерархии; private статические члены в наследуемых классах не включаются.
Укажите BindingFlags.Default отдельный, чтобы вернуть пустой MethodInfo массив.
BindingFlagsДля изменения работы поиска можно использовать следующие флаги модификаторов:
BindingFlags.DeclaredOnly значение, чтобы искать только члены, объявленные в Type , а не члены, которые были просто унаследованы.

Слайд 20

Пример 2

https://www.youtube.com/watch?v=i2W2wA-Udro

Добавим в метод GetMembers, два флага
NonPublic - все непубличные
Instance - выбираем

Пример 2 https://www.youtube.com/watch?v=i2W2wA-Udro Добавим в метод GetMembers, два флага NonPublic - все
не статичные элементы, а типы которые представляют собой экземплярные элементы

Поля которые скрывают значения свойства

private int _temp = 7;

Защищенные элементы System.object

Слайд 21

Способы получения экземпляра

https://www.nookery.ru/understand-with-reflection/

Способы получения экземпляра https://www.nookery.ru/understand-with-reflection/

Слайд 22

Пример 3

https://www.youtube.com/watch?v=i2W2wA-Udro

Теперь попробуем менять с помощью метаданных сами данные

С помощью механизма рефлексии

Пример 3 https://www.youtube.com/watch?v=i2W2wA-Udro Теперь попробуем менять с помощью метаданных сами данные С
мы изменили private поля.
Но этим не следует злоупотреблять!!!

Слайд 23

Метод GetField

Метод GetField – возвращает поля текущего объекта Type.

https://docs.microsoft.com/ru-ru/dotnet/api/system.type.getfields?view=netframework-4.8

Метод GetField Метод GetField – возвращает поля текущего объекта Type. https://docs.microsoft.com/ru-ru/dotnet/api/system.type.getfields?view=netframework-4.8

Слайд 24

Пример 4

https://www.youtube.com/watch?v=i2W2wA-Udro

Рассмотрим пример создания новых объектов с помощью рефлексии

В итоге получаем экземпляр

Пример 4 https://www.youtube.com/watch?v=i2W2wA-Udro Рассмотрим пример создания новых объектов с помощью рефлексии В
класса User, но он у нас будет не типизированным: object user.

Слайд 25

Пример 4

ConstructorInfo constructorInfo = type.GetConstructor(new Type[] { });
Получаем метаописание конструктора, нашего класса.

Пример 4 ConstructorInfo constructorInfo = type.GetConstructor(new Type[] { }); Получаем метаописание конструктора,
Поскольку конструктор класса User пустой, передаем пустой массив.

object user = constructorInfo.Invoke(new object[] { });
Вызываем реальный конструктор. Поскольку конструктор без параметров, передаем пустой массив.

https://www.youtube.com/watch?v=i2W2wA-Udro

Слайд 26

Рефлексия

Reflection (Отражение)

https://www.youtube.com/watch?v=i2W2wA-Udro

Механизм при помощи которого разработчик сообщает дополнительную информацию о том или

Рефлексия Reflection (Отражение) https://www.youtube.com/watch?v=i2W2wA-Udro Механизм при помощи которого разработчик сообщает дополнительную информацию
ином объекте называется атрибутом.

Слайд 27

Пример 5

https://www.youtube.com/watch?v=i2W2wA-Udro

Рассмотрим пример с атрибутами

Атрибут сам по себе ни какой нагрузки не

Пример 5 https://www.youtube.com/watch?v=i2W2wA-Udro Рассмотрим пример с атрибутами Атрибут сам по себе ни
несет. Он расширяет таблицу метаданных.

Слайд 28

Пример 6

https://www.youtube.com/watch?v=i2W2wA-Udro

Рассмотрим усложненный пример с атрибутам, с включением дополнительного свойства

Пример 6 https://www.youtube.com/watch?v=i2W2wA-Udro Рассмотрим усложненный пример с атрибутам, с включением дополнительного свойства

Слайд 29

Пример 7

https://www.youtube.com/watch?v=i2W2wA-Udro

Ограничим область действия атрибута.
По умолчанию область действия атрибута распространяется к чему

Пример 7 https://www.youtube.com/watch?v=i2W2wA-Udro Ограничим область действия атрибута. По умолчанию область действия атрибута
угодно (класс, методы, свойства, …)

Слайд 30

Рассмотреть примеры

Рассмотреть примеры
Имя файла: Рефлексия.-Лекция-4.pptx
Количество просмотров: 35
Количество скачиваний: 0