C#: dilin əsas anlayışları, .NET MAUI və Xamarin inkişafı

Müəllif: IT Sectr Dərc olunub: 2026-02-10 Oxuma vaxtı: 12 dəq

C# — Microsoft-dan müasir obyekt yönümlü proqramlaşdırma dili, mobil inkişafda Xamarin və .NET MAUI platformalarının əsasını təşkil edir. Vahid .NET ekosistemi sayəsində proqramçılar C# və XAML-da ümumi koddan istifadə edərək iOS və Android üçün mobil tətbiqlər yarada bilərlər. TIOBE indeksinə görə (2026), C# bütün proqramlaşdırma dilləri arasında populyarlıq baxımından 4-cü yerdədir. Ətraflı — Microsoft C# sənədləşməsində.

Əsas məqamlar

  • C# — .NET platforması üçün Microsoft-dan obyekt yönümlü dil
  • .NET MAUI — Xamarin-in varisi, iOS, Android, Windows, macOS üçün vahid layihə
  • XAML — bütün .NET platformaları üçün ümumi deklarativ UI işarələməsi
  • CLR — JIT/AOT kompilasiyası və zibil yığımı ilə Common Language Runtime
  • LINQ — kolleksiyalar və verilənlər bazası ilə iş üçün Language Integrated Query

C# nədir?

C# («si şarp» kimi tələffüz olunur) — 2000-ci ildə Anders Heylsberqin rəhbərliyi altında Microsoft tərəfindən hazırlanmış təhlükəsiz tip sistemi ilə obyekt yönümlü proqramlaşdırma dilidir. Adı musiqi notasiyasından ilhamlanıb (diez — tonun yüksəldilməsi). C# .NET platformasında işləyir, bura Common Language Runtime (CLR) və geniş sinif kitabxanası (BCL — Base Class Library) daxildir.

Mobil inkişafda C# iki texnologiya vasitəsilə istifadə olunur: Xamarin (2011–2024) və onun varisi .NET MAUI (2022+). Xamarin ümumi C# kodu ilə yerli Android və iOS tətbiqləri yaratmağa imkan verirdi, platforma layihələrini ayıraraq. .NET MAUI bütün platformaları ümumi XAML işarələməsi və platforma interfeysləri vasitəsilə yerli API-lərə çıxış ilə vahid layihədə birləşdirir.

C#-ın əsas xüsusiyyəti — dynamic vasitəsilə dinamik göndərmə imkanı, var açar sözü (tipin çıxarılması) və güclü generik sistem ilə ciddi statik tipləmə. C# tam idarə olunan dildir: yaddaş zibil yığan (GC) tərəfindən idarə olunur, massiv sərhədləri yoxlanılır, başladılmamış dəyişənlər qadağandır. Bu, AOT kompilasiyası vasitəsilə müqayisə olunan performansda C++-dan daha təhlükəsiz edir.

C# versiyaları və təkamül

C# 1.0 (2000) — əsas OOP dili. C# 3.0 (2007) — LINQ, lambda ifadələri, extension methods. C# 6.0 (2015) — string interpolation, null-conditional operator. C# 8.0 (2019) — nullable reference types (null təhlükəsizliyinin aktivləşdirilməsi), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Hər versiya mobil inkişaf üçün əhəmiyyətli təkmilləşdirmələr gətirir.

C# versiyasıİlƏsas xüsusiyyətMobil inkişaf üçün əhəmiyyəti
3.02007LINQ, lambdalarKolleksiyalar və VB ilə sadələşdirilmiş iş
6.02015?. (null-conditional), string interpolationXüsusiyyətlərə təhlükəsiz giriş, oxunaqlı sətirlər
8.02019Nullable reference types, async streamsNull təhlükəsizliyi, asinxron məlumat axınları
102021Record struct, global usingsValue tipləri, boilerplate-in azaldılması
122023Primary constructors, collection expressionsSinif və kolleksiyaların yığcam yazılışı

C# sintaksisi: tiplər, siniflər və LINQ

C# sintaksisi — C oxşar, ciddi tiplənmiş. Hər şey obyektdir, o cümlədən primitivlər (int, double, bool — ValueType-dan miras alan strukturlar). C# tipləri value types (int, double, bool, struct, enum — yığında saxlanılır) və reference types (string, class, interface, delegate, array, record — yığında saxlanılır) bölür. Nullable tiplər (int?) value types üçün null-a icazə verir.

Məlumat tipləri və siniflər

C# sinifləri (class), strukturları (struct), qeydləri (record), interfeysləri (interface), sadalamaları (enum) və deleqatları (delegate) dəstəkləyir. record — dəyər əsaslı bərabərlik ilə dəyişməz reference type (iki record bərabərdir, əgər bütün sahələri bərabərdirsə). record struct — C# 10-da tətbiq edilmiş record-un value versiyası. primary constructors (C# 12) bəyannamə və inisiallaşdırmanı bir sətirdə birləşdirir.

csharp
// C#-ın əsas tipləri və sinifləri
using System;
using System.Collections.Generic;

// Primary constructor ilə Record (C# 12)
public record User(int Id, string Name, string Email);

// Nullable xüsusiyyətləri olan sinif
public class AppConfig
{
    public string AppName { get; init; }
    public string? ApiUrl { get; set; } // nullable reference type
    public int Version { get; init; }

    // Expression body ilə metod
    public string GetDisplayName() => $"{AppName} v{Version}";
}

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

// İstifadə
var user = new User(1, "Alice", "alice@example.com");
bool validEmail = user.Email.IsValidEmail();

Primary constructor ilə User qeydi avtomatik olaraq equals, hashCode, ToString, Deconstruct və with-kopyalama yaradır. Init-only setterlər (AppName) dəyəri yalnız inisiallaşdırıcıda təyin etməyə imkan verir. Expression body (=>) — sadə metodlar üçün yığcam yazılış. IsValidEmail extension methodu irs olmadan string-ə metod əlavə edir.

LINQ — Language Integrated Query

LINQ — kolleksiyalara, verilənlər bazalarına, XML-ə daxili sorğu dili. LINQ to Objects — IEnumerable kolleksiyalarına sorğular. LINQ to SQL — verilənlər bazasına. LINQ to XML — XML-ə. Sintaksis query (from u in users where u.Age > 18 select u) və method (users.Where(u => u.Age > 18).Select(u => u)) ola bilər. Gec yükləmə (deferred execution): sorğu iterasiya zamanı yerinə yetirilir, bəyannamə zamanı yox.

csharp
// Kolleksiyalara LINQ sorğuları
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 sintaksisi
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// Bir neçə əməliyyatla Method sintaksisi
var result = users
    .Where(u => u.Email.Contains("example"))
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Email })
    .ToList();

// GroupBy və aqreqasiya
var emailsByDomain = users
    .GroupBy(u => u.Email.Split('@')[1])
    .Select(g => new { Domain = g.Key, Count = g.Count() });

// Async axını ilə LINQ (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");
}

filteredUsers LINQ sorğusu istifadəçiləri email domeninə görə filtrləyir və ada görə sıralayır. Method syntax .Where().OrderBy().Select() — query syntax-a ekvivalent metodlar zənciri. GroupBy email domeninə görə qruplaşdırır. IAsyncEnumerable (C# 8) — IEnumerable-un asinxron versiyası, mobil tətbiqdə məlumatların axın yüklənməsi üçün faydalıdır.

Xamarin və .NET MAUI: arxitektura

Xamarin (2011–2024) — C#-da kross-platform mobil inkişaf üçün Microsoft-un ilk platforması. Xamarin.Android (Linux nüvəsi üzərində Mono runtime) və Xamarin.iOS (iOS-da JIT qadağasına görə ARM64-ə AOT kompilasiyası) ibarət idi. Xamarin.Forms — elementləri yerli (Android View / iOS UIView) tərcümə edən ümumi UI qatı XAML işarələməsi ilə.

.NET MAUI (.NET Multi-platform App UI) — 2022-ci ildə buraxılmış Xamarin-in varisi. Vahid .csproj layihəsi, bir XAML işarələməsi, bir giriş nöqtəsi. 5 platformanı dəstəkləyir: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI Renderer əvəzinə yeni Handler arxitekturasından istifadə edir: hər bir XAML elementi platforma handleri vasitəsilə yerli komponentə xəritələnir.

xml
<!-- MainPage.xaml — deklarativ 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>

.NET MAUI-nun XAML işarələməsi UI-ni deklarativ təsvir edir. ScrollView — sürüşdürmə, VerticalStackLayout — şaquli yerləşmə. Label, Entry (mətn daxil etmə), Button — əsas elementlər. CollectionView — elementləri göstərmək üçün DataTemplate ilə virtualizə edilmiş siyahı. Clicked hadisəsi MainPage.xaml.cs code-behind-də OnSubmitClicked metoduna bağlanır.

csharp
// MainPage.xaml.cs — C# məntiqi ilə code-behind
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;
    }
}

MainPage code-behind-i ContentPage-dən miras alır. InitializeComponent() XAML işarələməsini yükləyir. NameEntry.Text?.Trim() — təhlükəsiz giriş üçün null-conditional operator (?.). DisplayAlert — yerli dialoq. ItemsView.ItemsSource — kolleksiyaya Binding. async/await asinxron yükləmə üçün. MVVM (Model-View-ViewModel) arxitekturası mürəkkəb layihələr üçün tövsiyə olunur.

Mobil inkişafda C#

C# mobil inkişafı üç yanaşma təklif edir: .NET MAUI (kross-platform UI), Xamarin (köhnə) və Unity (oyunlar). .NET MAUI — yeni layihələr üçün tövsiyə olunan yoldur. C# tətbiqi Intermediate Language (IL)-ə kompilyasiya olunur, NativeAOT (.NET MAUI) və ya Mono (Xamarin) onu yerli ARM koduna çevirir. iOS AOT kompilasiyası tələb edir — JIT Apple siyasəti ilə qadağandır.

Yerli API-lərə giriş

.NET MAUI platforma imkanları ilə iş üçün interfeyslər vasitəsilə vahid API təmin edir: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Platforma spesifik kod üçün şərti kompilasiya (#if ANDROID, #if IOS) və ya partial class istifadə olunur.

csharp
// .NET MAUI-da DI ilə geolokasiya
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($"Yer tapma xətası: {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 xidməti DI (IGeolocation asılılığının enjeksiyonu) istifadə edir. CheckAndRequestPermission geolokasiya icazəsini yoxlayır və tələb edir. GetLastKnownLocationAsync — sürətli (lakin həmişə dəqiq olmayan) cavab, GetLocationAsync — dəqiqlik və vaxt aşımı parametrləri ilə sorğu. null yoxlamaları (location == null) nullable reference types ilə. try-catch platforma istisnalarını idarə edir.

Mobil cihazlarda C# performansı

C# mobil cihazlarda Android-də Java/Kotlin və iOS-da Swift ilə müqayisə olunan performans göstərir. NativeAOT (.NET 8+) C#-ı IL ara mərhələsi olmadan birbaşa yerli koda kompilyasiya edir — bu, başlanğıc vaxtını 50% azaldır və yaddaş istehlakını aşağı salır. .NET MAUI-da GC qısa fasilələrlə mobil platformalar üçün optimallaşdırılıb (Workstation GC). APK ölçüsü — ~20-30 MB (NativeAOT ilə).

ParametrXamarin.NET MAUI
ArxitekturaXamarin.Android + Xamarin.iOSVahid .csproj layihəsi
UI renderinqRenderer (Xamarin.Forms)Handler (.NET MAUI)
KompilasiyaMono JIT (Android), AOT (iOS)NativeAOT (bütün platformalar)
StatusDəstək rejimiAktiv inkişaf
PlatformalarAndroid, iOS, WindowsAndroid, iOS, Windows, macOS, Tizen

.NET platforması və CLR

.NET platforması — CLR (Common Language Runtime), BCL (Base Class Library), server inkişafı üçün ASP.NET Core və mobil tətbiqlər üçün .NET MAUI daxil olmaqla idarə olunan kodun icrası üçün ekosistem. .NET 8+ — bütün tətbiq növləri üçün vahid platforma: mobil, desktop, veb, bulud, IoT, Oyunlar (Unity).

CLR — CIL (Common Intermediate Language) kodunu icra edən virtual maşın. C#, VB.NET, F# CIL-ə kompilyasiya olunur. CLR-nin JIT-kompilyatoru metodun ilk çağırışında CIL-i maşın koduna çevirir. NativeAOT (qabaqcadan kompilasiya) CIL-i qurma mərhələsində yerli koda kompilyasiya edir — JIT-in məhdud ola biləcəyi mobil platformalar (iOS) üçün idealdır.

GC .NET zibil yığanı — generational (nəsillər 0, 1, 2), istifadə olunmayan obyektləri avtomatik azad edir. Mobil tətbiqlər üçün minimal fasilələrlə Workstation GC tövsiyə olunur. GC ayrı bir ipdə baş verir, UI ipini bloklamır. Background GC — interaktiv tətbiqlər üçün fasilələri minimuma endirən fon yığanı.

C# tərtibatçısının alətləri

C# tərtibatçısının alətləri Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider daxildir. Visual Studio 2022 — XAML dizayneri, idarə olunan və yerli kod debugeri, CPU/yaddaş profilçisi ilə əsas IDE. .NET SDK csc kompilyatoru, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test) daxildir.

NuGet — JS üçün npm-ə bənzər .NET paket meneceri. CommunityToolkit.Maui (UI komponentləri), SQLite-net (VB), Firebase Cloud Messaging, ZXing.Net.Maui (QR kodları) daxil olmaqla 300 000+ paket. .NET MAUI Community Toolkit — inkişafı sürətləndirmək üçün davranışlar, çeviricilər, animasiyalar toplusu. RestSharp və Refit — HTTP müştəriləri. Prism və MVVM Community Toolkit — arxitektura freymvorkları.

xml
<!-- .csproj — .NET MAUI layihəsinin konfiqurasiyası -->
<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 faylı — .NET MAUI layihəsinin konfiqurasiyası. TargetFrameworks hədəf platformaları sadalayır. UseMaui MAUI SDK-nı aktivləşdirir. PackageReference — NuGet-dən asılılıqlar. CommunityToolkit.Maui — UI komponentləri (tostlar, snəkbrlar, Popup). sqlite-net-pcl — yerli VB. Refit — interfeyslərə əsaslanan tipləşdirilmiş HTTP müştərisi. dotnet build/publish tətbiqi bütün platformalar üçün qurur.

Tez-tez verilən suallar

C# nədir?

C# — Microsoft-dan (2000) obyekt yönümlü proqramlaşdırma dili, .NET (CLR) platformasında işləyir. Xamarin və .NET MAUI vasitəsilə mobil inkişaf üçün istifadə olunur. Ciddi statik tipləmə, avtomatik yaddaş idarəetməsi (GC), LINQ, async/await və generikləri birləşdirir. TIOBE indeksində (2026) 4-cü yerdədir. Anders Heylsberq tərəfindən hazırlanmışdır.

Xamarin .NET MAUI-dən nə ilə fərqlənir?

Xamarin — sələfi (2011-2024), layihələri Xamarin.Android və Xamarin.iOS-a ayırırdı. .NET MAUI (2022+) — ümumi XAML işarələməsi, Renderer əvəzinə Handler arxitekturası və 5 platforma dəstəyi (iOS, Android, Windows, macOS, Tizen) ilə vahid .csproj layihəsi. Xamarin dəstək rejiminə keçib, yeni layihələr .NET MAUI-də yaradılır. NativeAOT yalnız .NET MAUI-də mövcuddur.

C# mobil platformalarda necə işləyir?

C# CIL (Common Intermediate Language)-ə kompilyasiya olunur, NativeAOT (.NET MAUI) və ya Mono (Xamarin) onu yerli ARM koduna çevirir. Android IL-ni icra etmək üçün Mono runtime (Xamarin) və ya NativeAOT (.NET MAUI) istifadə edir. iOS AOT kompilasiyası tələb edir — JIT Apple tərəfindən qadağandır. .NET MAUI interfeyslər vasitəsilə platforma tətbiqi ilə kamera, GPS, sensorlar üçün vahid API təmin edir.

C# hansı məlumat tiplərini dəstəkləyir?

C# tipləri value types (int, double, bool, char, struct, enum — yığın) və reference types (string, class, interface, array, delegate, record — yığın) bölür. Nullable tiplər (int?) value types üçün null-a icazə verir. record (C# 9) — dəyər əsaslı bərabərlik ilə dəyişməz reference type. record struct (C# 10) — value versiyası. dynamic — dinamik tipləmə. var — kompilyator tərəfindən tip çıxarılması.

C# mobil inkişafı üçün hansı alətlər istifadə olunur?

Visual Studio 2022 (Windows) və Visual Studio for Mac — XAML dizayneri, debuger və profilçi ilə əsas IDE. .NET SDK — csc kompilyatoru, dotnet CLI, MSBuild. NuGet — paket meneceri (300 000+). CommunityToolkit.Maui — UI komponentləri. JetBrains Rider — alternativ IDE. Test üçün: xUnit, NUnit, Moq. CI/CD üçün: Azure DevOps, GitHub Actions.

Nəticə

  • C# — GC, LINQ və ciddi tipləmə ilə .NET platforması üçün Microsoft-dan obyekt yönümlü dil
  • .NET MAUI — vahid layihə, Handler arxitekturası və 5 platforma ilə Xamarin-in varisi
  • XAML — C#-da code-behind ilə bütün platformalar üçün ümumi deklarativ UI işarələməsi
  • LINQ — lazy evaluation ilə kolleksiyalar, VB və XML üçün daxili sorğu dili
  • NativeAOT — başlanğıc vaxtını 50% azaldan yerli koda qabaqcadan kompilasiya
  • NuGet — .NET MAUI və Xamarin üçün 300 000+ kitabxana ilə paket meneceri
  • Visual Studio və dotnet CLI — qurma, test və nəşr üçün əsas alətlər

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun