C# везде: как писать кроссплатформенные приложения без боли

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему C# — это не только про Windows?

Долгое время C# ассоциировался исключительно с экосистемой Microsoft и Windows. Разработчики, которые хотели писать под Linux или macOS, смотрели в сторону Java, Python или JavaScript. Но времена изменились. С выходом .NET Core (а затем и .NET 5/6/7/8) Microsoft сделала решительный шаг в мир открытого кода и кроссплатформенности.

Сегодня C# — это мощный, современный язык, на котором можно создавать всё: от консольных утилит для Linux-сервера до мобильных приложений под iOS и Android. И всё это с одним языком, одной IDE (Rider или VS Code) и, что важно, с единой логикой бизнес-кода.

В этой статье мы разберём, какие технологии позволяют писать кроссплатформенные приложения на C#, сравним их, покажем реальный код и дадим практические советы. Если вы думаете, что C# — это "только для Windows", приготовьтесь удивляться.

Эволюция кроссплатформенности в .NET

Путь C# к кроссплатформенности был долгим. Вспомним основные вехи:

  • Mono (2004) — первая open-source реализация .NET Framework для Linux. Работало, но с ограничениями.
  • Xamarin (2011) — позволил писать мобильные приложения на C# для iOS и Android. Настоящий прорыв.
  • .NET Core (2016) — полностью переписанный, модульный, кроссплатформенный фреймворк. Открытый код.
  • .NET 5+ (2020) — унификация всех веток: .NET Framework, .NET Core и Xamarin слились в единый .NET.
  • .NET MAUI (2022) — эволюция Xamarin.Forms для создания нативных UI под все платформы.

Сейчас, в 2024 году, у нас есть зрелый инструментарий для разработки под любые платформы. Давайте посмотрим на основные варианты.

Основные технологии кроссплатформенной разработки на C#

Выбор технологии зависит от того, что именно вы пишете. Мы выделим четыре основных направления:

1. .NET MAUI — нативные мобильные и десктопные приложения

.NET MAUI (Multi-platform App UI) — это фреймворк для создания пользовательских интерфейсов, которые работают на Android, iOS, macOS, Windows и (экспериментально) Linux. Вы пишете XAML-разметку и C#-логику один раз, а на выходе получаете нативные приложения.

Пример кода: простое приложение-счётчик

<!-- MainPage.xaml -->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.MainPage">
    <VerticalStackLayout Padding="30" Spacing="25">
        <Label Text="Привет, кроссплатформа!"
               FontSize="32"
               HorizontalOptions="Center"/>
        <Label x:Name="CounterLabel"
               Text="0"
               FontSize="48"
               HorizontalOptions="Center"/>
        <Button Text="Нажми меня"
                Clicked="OnCounterClicked"
                HorizontalOptions="Center"/>
    </VerticalStackLayout>
</ContentPage>
// MainPage.xaml.cs
namespace MauiApp1;

public partial class MainPage : ContentPage
{
    private int _count = 0;

    public MainPage()
    {
        InitializeComponent();
    }

    private void OnCounterClicked(object sender, EventArgs e)
    {
        _count++;
        CounterLabel.Text = _count.ToString();
    }
}

Этот код без изменений будет работать на iPhone, Android-смартфоне, MacBook и Windows-ПК. Для Linux потребуется дополнительная настройка, но сообщество активно работает над этим.

2. Avalonia UI — десктоп под Windows, Linux и macOS с уникальным дизайном

Avalonia — это open-source фреймворк, который вдохновлён WPF, но полностью кроссплатформенный. Его главная фишка: он не эмулирует нативные контролы, а рисует свой интерфейс через SkiaSharp. Это даёт полный контроль над внешним видом.

Avalonia идеален для сложных десктопных приложений, где нужен нестандартный UI: редакторы, панели управления, медиаплееры.

Пример: окно с приветствием

<!-- MainWindow.axaml -->
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="AvaloniaApp1.MainWindow"
        Title="Avalonia App"
        Width="400" Height="300">
    <StackPanel Margin="20">
        <TextBlock Text="Введите имя:" FontSize="16"/>
        <TextBox x:Name="NameInput" Margin="0,10"/>
        <Button Content="Поздороваться" 
                Click="OnGreetClick"
                Margin="0,10"/>
        <TextBlock x:Name="GreetingOutput" FontSize="20" Foreground="Green"/>
    </StackPanel>
</Window>
// MainWindow.axaml.cs
using Avalonia.Controls;
using Avalonia.Interactivity;

namespace AvaloniaApp1;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnGreetClick(object? sender, RoutedEventArgs e)
    {
        var name = NameInput.Text ?? "мир";
        GreetingOutput.Text = $"Привет, {name}!";
    }
}

Соберите проект — и он запустится на Windows, Linux и macOS. Выглядит одинаково везде.

3. Blazor Hybrid — веб-технологии в нативной оболочке

Blazor Hybrid (через .NET MAUI) позволяет использовать HTML, CSS и C# для создания нативных приложений. Вы пишете UI на Razor-компонентах, а C# работает на сервере или прямо в процессе приложения (через WebView).

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

Пример: компонент Blazor в MAUI

@* Counter.razor *@
@page "/counter"

<PageTitle>Счётчик</PageTitle>

<h1>Счётчик</h1>

<p role="status">Текущее значение: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">+1</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Этот компонент работает внутри нативного приложения MAUI. Вы получаете гибкость веба + доступ к нативным API (камера, GPS, файловая система).

4. Консольные и серверные приложения — классика .NET

Не забываем про фундамент. Любое консольное приложение на .NET 6+ работает везде. Это база для утилит, демонов, веб-серверов (ASP.NET Core).


                
                

Блоги

Рекомендаций по книгам