Генератор исходного кода поставляется с 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.

Работа была сделана несколько месяцев назад, и я рассказываю вам историю с самого начала.



Вся серия