Почему 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).
Блоги
Рекомендаций по книгам
Читайте также