C# — модерен обектно-ориентиран език за програмиране от Microsoft, който е основа за платформите Xamarin и .NET MAUI в мобилната разработка. Благодарение на единната екосистема .NET, разработчиците могат да създават мобилни приложения за iOS и Android, използвайки общ код на C# и XAML. Според индекса TIOBE (2026), C# заема 4-то място по популярност сред всички езици за програмиране. Повече в документацията на Microsoft 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# 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.0 | 2007 | LINQ, ламбди | Опростена работа с колекции и бази данни |
| 6.0 | 2015 | ?. (null-conditional), string interpolation | Безопасен достъп до свойства, четими низове |
| 8.0 | 2019 | Nullable reference types, async streams | Null безопасност, асинхронни потоци от данни |
| 10 | 2021 | Record struct, global usings | Типове стойности, намаляване на boilerplate |
| 12 | 2023 | Primary constructors, collection expressions | Кратък запис на класове и колекции |
Синтаксис на 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) обединяват декларацията и инициализацията в един ред.
// Основни типове и класове 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 — вграден език за заявки към колекции, бази данни, 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): заявката се изпълнява при итерация, а не при декларация.
// 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 (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.
<!-- 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.
// 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# предлага три подхода: .NET MAUI (кросплатформен UI), Xamarin (стар) и Unity (игри). .NET MAUI — препоръчителен път за нови проекти. Приложението на C# се компилира до Intermediate Language (IL), който NativeAOT (.NET MAUI) или Mono (Xamarin) преобразуват в естествен ARM код. iOS изисква AOT компилация — JIT е забранен от политиките на Apple.
.NET MAUI предоставя единни API за работа с платформени възможности чрез интерфейси: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. За специфичен за платформа код се използва условна компилация (#if ANDROID, #if IOS) или partial class.
// Геолокация в .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# на мобилни устройства показва производителност, сравнима с 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, Windows | Android, iOS, Windows, macOS, Tizen |
Платформа .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# разработчик включват 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 — архитектурни рамки.
<!-- .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# — обектно-ориентиран език за програмиране от Microsoft (2000), работещ на платформата .NET (CLR). Използва се за мобилна разработка чрез Xamarin и .NET MAUI. Съчетава строга статическа типизация, автоматично управление на паметта (GC), LINQ, async/await и генерици. Заема 4-то място в индекса TIOBE (2026). Разработен от Андерс Хейлсберг.
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# се компилира до 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# разделя типовете на 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 — извод на тип от компилатора.
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.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също