Привет, народ!

В этой истории будет обсуждаться Цель 2.5: найти, выполнить и создать типы во время выполнения с помощью отражения! Надеюсь, вам это понравится.

В последнем рассказе была представлена ​​Задача 2.4: Создание и реализация иерархии классов.

Все коды для сертификационных серий можно найти здесь.

Введение

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

Следующие темы вращаются вокруг метаданных. Проще говоря, метаданные - это информация о данных. .NET Framework позволяет разработчикам добавлять метаданные, связанные с вашим кодом, типами и сборкой.

Создание и использование атрибутов

Атрибуты - это способ, которым .NET Frameworks позволяет разработчикам добавлять метаданные к сборкам, методам, типам, параметрам и свойствам.

Они популярны в разных ситуациях / целях. В следующем списке представлены некоторые примеры.

  • Сериализация: [Serializable], [NonSerializable], [DataContract], [DataMember], [XmlElement]
  • Действия HTTP для контроллеров ASP.NET: [HttpGet], [HttpPost], [HttpDelete], [HttpPut], [Authorize], [AllowAnnonymous]
  • Тестирование: [TestClass], [TestMethod] (атрибуты MSUnit), [TestFixture], [Test] (атрибуты NUnit), [Факт] (атрибут xUnit)

Вы создаете свои собственные атрибуты, создавая класс и наследуя его от Attribute.

Пример кода:

Использование отражения

Отражение позволяет разработчикам получать метаданные кода.

Он позволяет выполнять некоторые довольно интересные задачи, такие как получение типа объекта, получение списка типов в сборке, отображение информации о свойствах и методах (даже частных!) Классов и даже вызывать эти методы! Да, вы можете стать крутым хакером dll.

Примеры кода:

В приведенном выше коде показано, как получить тип объекта и просмотреть его свойства и методы. Также вызывается частный метод!

Кроме того, информация о сборке и ее типах извлекается посредством отражения.

Далее показан код ClassForReflectionPractice, экземпляр которого создается в строке 11:

Использование CodeDOM и лямбда-выражений для генерации кода

А как насчет автоматизации процесса генерации кода во время выполнения? Возможно, вам будет интересно сделать это, чтобы сэкономить время при разработке для ASP.NET, мастеров кода, дизайнеров и т. Д. Вы можете понять, что вам это нужно, если повторяете создание одного и того же кода несколько раз.

CodeDOM приходит вам на помощь. Он позволяет вам создавать код во время выполнения, представляя логическую структуру кода в виде графа, используя типичные элементы кода, такие как объявления методов и свойств, и используя операторы. Вы представляете эти элементы кода, используя CodeCompileUnit, который будет корневым узлом графа, а затем добавляете другие элементы, используя его определенные классы, которые расположены в пространстве имен System.CodeDom.

Разве не было бы замечательно создать полезный шаблон для своего проекта?

Пример кода:

В приведенном выше коде показано, как создать шаблон контроллера для веб-API ASP.NET с помощью CodeDOM.

Вот сгенерированный код при передаче значения «Задачи» в консольную программу:

Круто, да?

Лямбда-выражения

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

Анонимный метод, как вы можете понять из его названия, является безымянным методом, который имеет тип Action или Func ‹T,…›, в зависимости от того, возвращает ли он какое-либо значение. . Если вы уже знаете TypeScript, вы можете напрямую связать лямбда-выражения с стрелочными функциями. Лямбда-выражения широко используются в LINQ-запросах.

Пример кода:

В приведенном выше коде показана степень чисел от 0 до 10 с использованием лямбда-функций. Во второй части он использует тип Func ‹T,…› для создания анонимного метода.

Дерево выражений

Деревья выражений используются для представления кода в виде древовидной структуры. Как CodeDOM, его также можно использовать для генерации кода во время выполнения.

Как и в случае с System.CodeDOM, пространство имен System.Linq.Expressions используется для создания выражения, предлагая типы, которые будут использоваться для генерации исходного кода.

Пример кода:

В приведенном выше коде код для вычисления 3 в степени 2 реализован с использованием дерева выражений!

На этом пока все! Я надеюсь, что вы узнали хоть что-то полезное, независимо от того, учитесь ли вы, чтобы сдать сертификационный экзамен, или просто хотите узнать больше о C #.

Увидимся в следующем рассказе, где я расскажу о Задаче 2.6: Управление жизненным циклом объекта.

PS: Если вы найдете эту историю полезной, я приглашаю вас нажать кнопку Clap. Также буду рад видеть Вас в качестве моего нового последователя!