Генератор исходного кода поставляется с C# 9 и .NET 5 с 2020 года. Генератор исходного кода — это, по сути, код, который пишет код для вас. Это принесет некоторые преимущества вашему проекту .NET, например: уменьшите количество шаблонного кода, улучшите производительность за счет замены отражения и т. д.
Краткое введение для приветствия читателей
Как это работает? Короче говоря, когда разработчик пишет код, компилятор считывает его и передает его генератору исходного кода (SG). Затем SG анализирует код и создает новый код. Сделанный!
Этот процесс происходит снова и снова всякий раз, когда ваш исходный код изменяется, поэтому мы должны рассмотреть некоторые аспекты, которые позже повлияют на производительность и взаимодействие с пользователем.
Мы напишем простой, но полезный генератор
По сравнению с другими известными фреймворками, фреймворки из экосистемы .NET часто требуют от разработчиков написания большего количества кода для архивирования одного и того же. В данном случае мы имеем в виду .NET MAUI (мультиплатформенный интерфейс приложения). Для тех, кто не знает, MAUI — это фреймворк для создания мультиплатформенных приложений, работающих на Android, iOS, Windows и Mac. Для аналогов это будут React Native и Flutter.
Вот что вам нужно написать, чтобы создать компонент пользовательского интерфейса в MAUI:
namespace MyMauiApp.Controls; // This is a TextInput with 2 properties // You gonna need a least this amount of code public class TextInput : ContentView { public string Text { get => (string)GetValue(TextInput.TextProperty); set => SetValue(TextInput.TextProperty, value); } public static readonly BindableProperty TextProperty = BindableProperty.Create( nameof(Text), typeof(string), typeof(TextInput), string.Empty ); public string PlaceHolder { get => (string)GetValue(TextInput.PlaceHolderProperty); set => SetValue(TextInput.PlaceHolderProperty, value); } public static readonly BindableProperty PlaceHolderProperty = BindableProperty.Create( nameof(PlaceHolder), typeof(string), typeof(TextInput), string.Empty ); public TextInput() { // Implement your logic } }
В этом коде много повторяющихся частей, и мы решим эту проблему с помощью генератора исходного кода.
В конце нашего пути код выше будет улучшен и будет выглядеть так:
using BindableProps; namespace MyMauiApp.Controls; // 'partial' keyword tells the compiler that your class might have many pieces, written in many places // The compiler would go around and look for others 'partial class TextInput' // Then, combine all of them into a single class public partial class TextInput : ContentView { [BindableProp] string text; [BindableProp] string placeHolder; public TextInput() { // This piece is same as above } }
В заключение мы напишем генератор исходного кода, который поможет сократить объем кода, который разработчику придется писать при создании компонента пользовательского интерфейса в .NET MAUI.
Работа была сделана несколько месяцев назад, и я рассказываю вам историю с самого начала.