C#: ключови понятия на езика, .NET MAUI и Xamarin разработка

Автор: IT Sectr Публикувано: 2026-02-10 Време за четене: 12 мин

C# — модерен обектно-ориентиран език за програмиране от Microsoft, който е основа за платформите Xamarin и .NET MAUI в мобилната разработка. Благодарение на единната екосистема .NET, разработчиците могат да създават мобилни приложения за iOS и Android, използвайки общ код на C# и XAML. Според индекса TIOBE (2026), C# заема 4-то място по популярност сред всички езици за програмиране. Повече в документацията на Microsoft C#.

Основни точки

  • C# — обектно-ориентиран език от Microsoft за платформата .NET
  • .NET MAUI — наследник на Xamarin, единен проект за iOS, Android, Windows, macOS
  • XAML — декларативен UI маркиращ език, общ за всички .NET платформи
  • CLR — Common Language Runtime с JIT/AOT компилация и събиране на отпадъци
  • LINQ — Language Integrated Query за работа с колекции и бази данни

Какво е C#?

C# (произнася се «си шарп») — обектно-ориентиран език за програмиране с безопасна система от типове, разработен от Microsoft през 2000 г. под ръководството на Андерс Хейлсберг. Името е вдъхновено от музикалната нотация (диез — повишаване на тона). C# работи на платформата .NET, която включва Common Language Runtime (CLR) и обширна библиотека от класове (BCL — Base Class Library).

В мобилната разработка C# се използва чрез две технологии: Xamarin (2011–2024) и неговия наследник .NET MAUI (2022+). Xamarin позволяваше създаването на естествени Android и iOS приложения с общ C# код, разделяйки платформените проекти. .NET MAUI обединява всички платформи в един проект с общ XAML маркиращ език и достъп до естествени API чрез платформени интерфейси.

Ключова характеристика на C# — строга статическа типизация с възможност за динамично изпращане чрез dynamic, ключова дума var (извод на тип) и мощна система от генерици. C# е напълно управляван език: паметта се управлява от събирача на отпадъци (GC), границите на масивите се проверяват, неинициализираните променливи са забранени. Това прави C# по-безопасен от C++ при сравнима производителност чрез AOT компилация.

Версии на C# и еволюция

C# 1.0 (2000) — основен OOP език. C# 3.0 (2007) — LINQ, ламбда изрази, extension methods. C# 6.0 (2015) — string interpolation, null-conditional оператор. C# 8.0 (2019) — nullable reference types (включване на null безопасност), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Всяка версия носи подобрения, свързани с мобилната разработка.

Версия C#ГодинаКлючова функцияЗначение за мобилната разработка
3.02007LINQ, ламбдиОпростена работа с колекции и бази данни
6.02015?. (null-conditional), string interpolationБезопасен достъп до свойства, четими низове
8.02019Nullable reference types, async streamsNull безопасност, асинхронни потоци от данни
102021Record struct, global usingsТипове стойности, намаляване на boilerplate
122023Primary constructors, collection expressionsКратък запис на класове и колекции

Синтаксис на C#: типове, класове и LINQ

Синтаксис на C# — подобен на C, строго типизиран. Всичко е обект, включително примитивите (int, double, bool — това са структури, наследяващи ValueType). C# разделя типовете на value types (int, double, bool, struct, enum — съхранявани в стека) и reference types (string, class, interface, delegate, array, record — съхранявани в хепа). Nullable типове (int?) позволяват null за value types.

Типове данни и класове

C# поддържа класове (class), структури (struct), записи (record), интерфейси (interface), изброявания (enum) и делегати (delegate). record — неизменим reference type с равенство, базирано на стойности (два записа са равни, ако всичките им полета са равни). record struct — версията за стойности на record, въведена в C# 10. primary constructors (C# 12) обединяват декларацията и инициализацията в един ред.

csharp
// Основни типове и класове C#
using System;
using System.Collections.Generic;

// Record с primary constructor (C# 12)
public record User(int Id, string Name, string Email);

// Клас с nullable свойства
public class AppConfig
{
    public string AppName { get; init; }
    public string? ApiUrl { get; set; } // nullable reference type
    public int Version { get; init; }

    // Метод с expression body
    public string GetDisplayName() => $"{AppName} v{Version}";
}

// Extension method
public static class StringExtensions
{
    public static bool IsValidEmail(this string email) =>
        email.Contains("@") && email.Contains(".");
}

// Използване
var user = new User(1, "Alice", "alice@example.com");
bool validEmail = user.Email.IsValidEmail();

Записът User с primary constructor автоматично генерира equals, hashCode, ToString, Deconstruct и with-копиране. Init-only сетъри (AppName) позволяват задаване на стойност само в инициализатора. Expression body (=>) — кратък запис за прости методи. Extension method IsValidEmail добавя метод към string без наследяване.

LINQ — Language Integrated Query

LINQ — вграден език за заявки към колекции, бази данни, XML. LINQ to Objects — заявки към IEnumerable колекции. LINQ to SQL — към бази данни. LINQ to XML — към XML. Синтаксисът може да бъде query (from u in users where u.Age > 18 select u) и method (users.Where(u => u.Age > 18).Select(u => u)). Мързеливо зареждане (deferred execution): заявката се изпълнява при итерация, а не при декларация.

csharp
// LINQ заявки към колекции
using System.Linq;

var users = new List<User>
{
    new User(1, "Alice", "alice@example.com"),
    new User(2, "Bob", "bob@test.com"),
    new User(3, "Charlie", "charlie@example.com"),
};

// Query синтаксис
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// Method синтаксис с няколко операции
var result = users
    .Where(u => u.Email.Contains("example"))
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Email })
    .ToList();

// GroupBy и агрегация
var emailsByDomain = users
    .GroupBy(u => u.Email.Split('@')[1])
    .Select(g => new { Domain = g.Key, Count = g.Count() });

// LINQ с async поток (IAsyncEnumerable)
await foreach (var user in GetUsersAsync())
{
    Console.WriteLine(user.Name);
}

async IAsyncEnumerable<User> GetUsersAsync()
{
    yield return new User(1, "Alice", "alice@example.com");
    await Task.Delay(100);
    yield return new User(2, "Bob", "bob@test.com");
}

LINQ заявката filteredUsers филтрира потребители по имейл домейн и сортира по име. Method syntax .Where().OrderBy().Select() — верига от методи, еквивалентна на query syntax. GroupBy групира по имейл домейн. IAsyncEnumerable (C# 8) — асинхронна версия на IEnumerable, полезна за стриймване на данни в мобилно приложение.

Xamarin и .NET MAUI: архитектура

Xamarin (2011–2024) — първата платформа на Microsoft за кросплатформена мобилна разработка на C#. Състоеше се от Xamarin.Android (Mono runtime върху Linux ядро) и Xamarin.iOS (AOT компилация до ARM64 поради забрана на JIT на iOS). Xamarin.Forms — общ UI слой с XAML маркиращ език, превеждащ елементи в естествени (Android View / iOS UIView).

.NET MAUI (.NET Multi-platform App UI) — наследник на Xamarin, пуснат през 2022 г. Единен .csproj проект, един XAML маркиращ език, една входна точка. Поддържа 5 платформи: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI използва новата Handler архитектура вместо Renderer: всеки XAML елемент се картографира към естествен компонент чрез платформен handler.

xml
<!-- MainPage.xaml — декларативен UI .NET MAUI -->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.MainPage">

    <ScrollView>
        <VerticalStackLayout Padding="30" Spacing="25">
            <Label Text="Welcome to .NET MAUI!"
                   FontSize="32"
                   HorizontalOptions="Center"/>

            <Entry x:Name="NameEntry"
                   Placeholder="Enter your name"/>

            <Button Text="Submit"
                    Clicked="OnSubmitClicked"
                    BackgroundColor="#512BD4"
                    TextColor="White"
                    CornerRadius="8"/>

            <CollectionView x:Name="ItemsView"
                          SelectionMode="Single">
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <Grid Padding="10">
                            <Label Text="{Binding Name}"
                                   FontSize="18"/>
                        </Grid>
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>

XAML маркиращият език на .NET MAUI описва UI декларативно. ScrollView — превъртане, VerticalStackLayout — вертикално разположение. Label, Entry (въвеждане на текст), Button — основни елементи. CollectionView — виртуализиран списък с DataTemplate за показване на елементи. Събитието Clicked се свързва с метода OnSubmitClicked в code-behind MainPage.xaml.cs.

csharp
// MainPage.xaml.cs — code-behind с C# логика
namespace MyApp;

public partial class MainPage : ContentPage
{
    private readonly List<User> _users = new();

    public MainPage()
    {
        InitializeComponent();
        LoadUsers();
    }

    private async void OnSubmitClicked(object? sender, EventArgs e)
    {
        var name = NameEntry.Text?.Trim();

        if (string.IsNullOrEmpty(name))
        {
            await DisplayAlert("Error", "Name is required", "OK");
            return;
        }

        _users.Add(new User(_users.Count + 1, name, $"{name}@example.com"));
        ItemsView.ItemsSource = null;
        ItemsView.ItemsSource = _users;
        NameEntry.Text = string.Empty;
    }

    private async void LoadUsers()
    {
        var apiService = new ApiService();
        var users = await apiService.GetUsersAsync();
        _users.AddRange(users);
        ItemsView.ItemsSource = _users;
    }
}

Code-behind на MainPage наследява ContentPage. InitializeComponent() зарежда XAML маркиращия език. NameEntry.Text?.Trim() — null-conditional оператор (?.) за безопасен достъп. DisplayAlert — естествен диалог. ItemsView.ItemsSource — Binding към колекция. async/await за асинхронно зареждане. Архитектурата MVVM (Model-View-ViewModel) се препоръчва за сложни проекти.

C# в мобилната разработка

Мобилна разработка с C# предлага три подхода: .NET MAUI (кросплатформен UI), Xamarin (стар) и Unity (игри). .NET MAUI — препоръчителен път за нови проекти. Приложението на C# се компилира до Intermediate Language (IL), който NativeAOT (.NET MAUI) или Mono (Xamarin) преобразуват в естествен ARM код. iOS изисква AOT компилация — JIT е забранен от политиките на Apple.

Достъп до естествени API

.NET MAUI предоставя единни API за работа с платформени възможности чрез интерфейси: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. За специфичен за платформа код се използва условна компилация (#if ANDROID, #if IOS) или partial class.

csharp
// Геолокация в .NET MAUI с DI
public class LocationService
{
    private readonly IGeolocation _geolocation;

    public LocationService(IGeolocation geolocation)
    {
        _geolocation = geolocation;
    }

    public async Task<Location?> GetCurrentLocation()
    {
        try
        {
            var permission = await CheckAndRequestPermission();
            if (permission != PermissionStatus.Granted)
                return null;

            var location = await _geolocation.GetLastKnownLocationAsync();

            if (location == null)
            {
                location = await _geolocation.GetLocationAsync(new GeolocationRequest
                {
                    DesiredAccuracy = GeolocationAccuracy.Medium,
                    Timeout = TimeSpan.FromSeconds(10)
                });
            }

            return location;
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"Грешка в местоположението: {ex.Message}");
            return null;
        }
    }

    private async Task<PermissionStatus> CheckAndRequestPermission()
    {
        var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();

        if (status != PermissionStatus.Granted)
        {
            status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
        }

        return status;
    }
}

Услугата LocationService използва DI (внедряване на зависимост IGeolocation). CheckAndRequestPermission проверява и иска разрешение за геолокация. GetLastKnownLocationAsync — бърз (но не винаги точен) отговор, GetLocationAsync — заявка с параметри за точност и време за изчакване. null проверки (location == null) с nullable reference types. try-catch обработва изключения на платформата.

Производителност на C# на мобилни устройства

C# на мобилни устройства показва производителност, сравнима с Java/Kotlin на Android и Swift на iOS. NativeAOT (.NET 8+) компилира C# директно в естествен код без IL междинен етап — това намалява времето за стартиране с 50% и намалява консумацията на памет. GC в .NET MAUI е оптимизиран за мобилни платформи с кратки паузи (Workstation GC). Размер на APK — ~20-30 MB (с NativeAOT).

ПараметърXamarin.NET MAUI
АрхитектураXamarin.Android + Xamarin.iOSЕдинен .csproj проект
UI изобразяванеRenderer (Xamarin.Forms)Handler (.NET MAUI)
КомпилацияMono JIT (Android), AOT (iOS)NativeAOT (всички платформи)
СтатусРежим на поддръжкаАктивна разработка
ПлатформиAndroid, iOS, WindowsAndroid, iOS, Windows, macOS, Tizen

Платформа .NET и CLR

Платформа .NET — екосистема за изпълнение на управляван код, включваща CLR (Common Language Runtime), BCL (Base Class Library), ASP.NET Core за сървърна разработка и .NET MAUI за мобилни приложения. .NET 8+ — единна платформа за всички типове приложения: мобилни, десктоп, уеб, облачни, IoT, Игри (Unity).

CLR — виртуална машина, изпълняваща CIL (Common Intermediate Language) код. C#, VB.NET, F# се компилират до CIL. JIT компилаторът на CLR преобразува CIL в машинен код при първото извикване на метод. NativeAOT (предварителна компилация) компилира CIL в естествен код на етапа на изграждане — идеално за мобилни платформи, където JIT може да бъде ограничен (iOS).

Събирачът на отпадъци GC на .NET — поколенчески (поколения 0, 1, 2), автоматично освобождава неизползвани обекти. За мобилни приложения се препоръчва Workstation GC с минимални паузи. GC се случва в отделна нишка, без да блокира UI нишката. Background GC — фонов събирач, минимизиращ паузите за интерактивни приложения.

Инструменти за C# разработчик

Инструменти за C# разработчик включват Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider. Visual Studio 2022 — основно IDE с XAML дизайнер, дебъгер за управляван и естествен код, профилировчик на CPU/памет. .NET SDK включва компилатора csc, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test).

NuGet — мениджър на пакети .NET, аналогичен на npm за JS. 300 000+ пакета, включително CommunityToolkit.Maui (UI компоненти), SQLite-net (база данни), Firebase Cloud Messaging, ZXing.Net.Maui (QR кодове). .NET MAUI Community Toolkit — колекция от поведения, конвертори, анимации за ускоряване на разработката. RestSharp и Refit — HTTP клиенти. Prism и MVVM Community Toolkit — архитектурни рамки.

xml
<!-- .csproj — конфигурация на .NET MAUI проект -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
    <OutputType>Exe</OutputType>
    <UseMaui>true</UseMaui>
    <ApplicationTitle>MyMAUIApp</ApplicationTitle>
    <ApplicationId>com.example.mymauiapp</ApplicationId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="CommunityToolkit.Maui" Version="9.0.0" />
    <PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
    <PackageReference Include="Refit" Version="7.0.0" />
  </ItemGroup>

</Project>

Файл .csproj — конфигурация на .NET MAUI проект. TargetFrameworks изброява целевите платформи. UseMaui активира MAUI SDK. PackageReference — зависимости от NuGet. CommunityToolkit.Maui — UI компоненти (тостове, снэкбарове, Popup). sqlite-net-pcl — локална база данни. Refit — типизиран HTTP клиент, базиран на интерфейси. dotnet build/publish изгражда приложението за всички платформи.

Често задавани въпроси

Какво е C#?

C# — обектно-ориентиран език за програмиране от Microsoft (2000), работещ на платформата .NET (CLR). Използва се за мобилна разработка чрез Xamarin и .NET MAUI. Съчетава строга статическа типизация, автоматично управление на паметта (GC), LINQ, async/await и генерици. Заема 4-то място в индекса TIOBE (2026). Разработен от Андерс Хейлсберг.

Как се различава Xamarin от .NET MAUI?

Xamarin — предшественик (2011-2024), разделяше проектите на Xamarin.Android и Xamarin.iOS. .NET MAUI (2022+) — единен .csproj проект с общ XAML маркиращ език, Handler архитектура вместо Renderer и поддръжка на 5 платформи (iOS, Android, Windows, macOS, Tizen). Xamarin премина в режим на поддръжка, нови проекти се създават на .NET MAUI. NativeAOT е достъпен само в .NET MAUI.

Как C# работи на мобилни платформи?

C# се компилира до CIL (Common Intermediate Language), който NativeAOT (.NET MAUI) или Mono (Xamarin) преобразуват в естествен ARM код. Android използва Mono runtime (Xamarin) или NativeAOT (.NET MAUI) за изпълнение на IL. iOS изисква AOT компилация — JIT е забранен от Apple. .NET MAUI предоставя единни API за камера, GPS, сензори с платформена имплементация чрез интерфейси.

Какви типове данни поддържа C#?

C# разделя типовете на value types (int, double, bool, char, struct, enum — стек) и reference types (string, class, interface, array, delegate, record — хеп). Nullable типове (int?) позволяват null за value types. record (C# 9) — неизменим reference type с равенство, базирано на стойности. record struct (C# 10) — версия за стойности. dynamic — динамично типизиране. var — извод на тип от компилатора.

Какви инструменти се използват за C# мобилна разработка?

Visual Studio 2022 (Windows) и Visual Studio for Mac — основни IDE с XAML дизайнер, дебъгер и профилировчик. .NET SDK — компилатор csc, dotnet CLI, MSBuild. NuGet — мениджър на пакети (300 000+). CommunityToolkit.Maui — UI компоненти. JetBrains Rider — алтернативно IDE. За тестване: xUnit, NUnit, Moq. За CI/CD: Azure DevOps, GitHub Actions.

Резюме

  • C# — обектно-ориентиран език на Microsoft за платформата .NET с GC, LINQ и строга типизация
  • .NET MAUI — наследник на Xamarin с единен проект, Handler архитектура и 5 платформи
  • XAML — декларативен UI маркиращ език, общ за всички платформи с code-behind на C#
  • LINQ — вграден език за заявки за колекции, бази данни и XML с мързеливо оценяване
  • NativeAOT — предварителна компилация в естествен код, намаляваща времето за стартиране с 50%
  • NuGet — мениджър на пакети с 300 000+ библиотеки за .NET MAUI и Xamarin
  • Visual Studio и dotnet CLI — основни инструменти за изграждане, тестване и публикуване

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също