C#: tilning asosiy tushunchalari, .NET MAUI va Xamarin rivojlanishi

Muallif: IT Sectr Nashr etilgan: 2026-02-10 O'qish vaqti: 12 daq

C# — Microsoft-dan zamonaviy ob'ektga yo'naltirilgan dasturlash tili bo'lib, mobil ishlanmada Xamarin va .NET MAUI platformalarining asosini tashkil etadi. Yagona .NET ekotizimi tufayli dasturchilar C# va XAML da umumiy koddan foydalanib iOS va Android uchun mobil ilovalar yaratishi mumkin. TIOBE indeksiga ko'ra (2026), C# barcha dasturlash tillari orasida mashhurlik bo'yicha 4-o'rinda. Batafsil — Microsoft C# hujjatlarida.

Asosiy

  • C# — .NET platformasi uchun Microsoft-dan ob'ektga yo'naltirilgan til
  • .NET MAUI — Xamarin vorisi, iOS, Android, Windows, macOS uchun yagona loyiha
  • XAML — barcha .NET platformalari uchun umumiy deklarativ UI belgilash
  • CLR — JIT/AOT kompilyatsiyasi va axlat yig'uvchi bilan Common Language Runtime
  • LINQ — kolleksiyalar va ma'lumotlar bazasi bilan ishlash uchun Language Integrated Query

C# nima?

C# («si sharp» deb talaffuz qilinadi) — 2000-yilda Anders Xeylsberg rahbarligida Microsoft tomonidan ishlab chiqilgan xavfsiz tur tizimiga ega ob'ektga yo'naltirilgan dasturlash tili. Nomi musiqiy notatsiyadan ilhomlangan (diyez — tonning ko'tarilishi). C# .NET platformasida ishlaydi, unga Common Language Runtime (CLR) va keng sinf kutubxonasi (BCL — Base Class Library) kiradi.

Mobil ishlanmada C# ikkita texnologiya orqali qo'llaniladi: Xamarin (2011–2024) va uning vorisi .NET MAUI (2022+). Xamarin umumiy C# kodi bilan mahalliy Android va iOS ilovalarini yaratishga imkon berardi, platforma loyihalarini ajratib. .NET MAUI barcha platformalarni umumiy XAML belgilashi va platforma interfeyslari orqali mahalliy API-larga kirish bilan yagona loyihada birlashtiradi.

C# ning asosiy xususiyati — dynamic orqali dinamik jo'natish imkoniyati, var kalit so'zi (tur chiqarish) va kuchli generik tizim bilan qattiq statik tiplash. C# to'liq boshqariladigan til: xotira axlat yig'uvchi (GC) tomonidan boshqariladi, massiv chegaralari tekshiriladi, boshlanmagan o'zgaruvchilar taqiqlangan. Bu AOT kompilyatsiyasi orqali taqqoslanadigan samaradorlikda C++ dan xavfsizroq qiladi.

C# versiyalari va evolyutsiyasi

C# 1.0 (2000) — asosiy OOP tili. C# 3.0 (2007) — LINQ, lambda ifodalari, extension methods. C# 6.0 (2015) — string interpolation, null-conditional operator. C# 8.0 (2019) — nullable reference types (null xavfsizligini yoqish), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Har bir versiya mobil ishlanma uchun muhim yaxshilanishlarni olib keladi.

C# versiyasiYilAsosiy xususiyatMobil ishlanma uchun ahamiyati
3.02007LINQ, lambdalarKolleksiyalar va MB bilan soddalashtirilgan ish
6.02015?. (null-conditional), string interpolationXususiyatlarga xavfsiz kirish, o'qiladigan satrlar
8.02019Nullable reference types, async streamsNull xavfsizligi, asinxron ma'lumot oqimlari
102021Record struct, global usingsValue turlari, boilerplate ni qisqartirish
122023Primary constructors, collection expressionsSinflar va kolleksiyalarning ixcham yozuvi

C# sintaksisi: turlar, sinflar va LINQ

C# sintaksisi — C o'xshash, qattiq tiplangan. Hamma narsa ob'ektdir, shu jumladan primitivlar (int, double, bool — ValueType dan meros oluvchi strukturalar). C# turlarni value types (int, double, bool, struct, enum — stekda saqlanadi) va reference types (string, class, interface, delegate, array, record — yig'imda saqlanadi) ga ajratadi. Nullable turlar (int?) value types uchun null ga ruxsat beradi.

Ma'lumot turlari va sinflar

C# sinflar (class), strukturalar (struct), yozuvlar (record), interfeyslar (interface), sanashlar (enum) va delegatlar (delegate) ni qo'llab-quvvatlaydi. record — qiymatga asoslangan tenglik bilan o'zgarmas reference type (ikki record teng, agar ularning barcha maydonlari teng bo'lsa). record struct — C# 10 da kiritilgan record ning value versiyasi. primary constructors (C# 12) deklaratsiya va ishga tushirishni bir qatorda birlashtiradi.

csharp
// C# ning asosiy turlari va sinflari
using System;
using System.Collections.Generic;

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

// Nullable xususiyatlarga ega sinf
public class AppConfig
{
    public string AppName { get; init; }
    public string? ApiUrl { get; set; } // nullable reference type
    public int Version { get; init; }

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

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

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

Primary constructor bilan User yozuvi avtomatik ravishda equals, hashCode, ToString, Deconstruct va with-nusxalashni yaratadi. Init-only setterlar (AppName) qiymatni faqat ishga tushirgichda o'rnatishga imkon beradi. Expression body (=>) — oddiy metodlar uchun ixcham yozuv. IsValidEmail extension methodi merossiz string ga metod qo'shadi.

LINQ — Language Integrated Query

LINQ — kolleksiyalar, ma'lumotlar bazalari, XML uchun o'rnatilgan so'rov tili. LINQ to Objects — IEnumerable kolleksiyalariga so'rovlar. LINQ to SQL — ma'lumotlar bazasiga. LINQ to XML — XML ga. Sintaksis query (from u in users where u.Age > 18 select u) va method (users.Where(u => u.Age > 18).Select(u => u)) bo'lishi mumkin. Kechikkan bajarish (deferred execution): so'rov iteratsiya vaqtida bajariladi, deklaratsiya vaqtida emas.

csharp
// Kolleksiyalarga LINQ so'rovlari
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 necha operatsiya bilan Method sintaksisi
var result = users
    .Where(u => u.Email.Contains("example"))
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Email })
    .ToList();

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

// Async oqim bilan 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 so'rovi foydalanuvchilarni email domeni bo'yicha filtrlaydi va nom bo'yicha saralaydi. Method syntax .Where().OrderBy().Select() — query syntax ga ekvivalent metodlar zanjiri. GroupBy email domeni bo'yicha guruhlaydi. IAsyncEnumerable (C# 8) — IEnumerable ning asinxron versiyasi, mobil ilovada ma'lumotlarni oqimli yuklash uchun foydali.

Xamarin va .NET MAUI: arxitektura

Xamarin (2011–2024) — C# da kross-platform mobil ishlanma uchun Microsoft ning birinchi platformasi. Xamarin.Android (Linux yadrosi ustida Mono runtime) va Xamarin.iOS (iOS da JIT taqiqi sababli ARM64 ga AOT kompilyatsiyasi) dan iborat edi. Xamarin.Forms — elementlarni mahalliy (Android View / iOS UIView) ga tarjima qiluvchi umumiy UI qatlami XAML belgilashi bilan.

.NET MAUI (.NET Multi-platform App UI) — 2022 yilda chiqarilgan Xamarin vorisi. Yagona .csproj loyihasi, bitta XAML belgilashi, bitta kirish nuqtasi. 5 platformani qo'llab-quvvatlaydi: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI Renderer o'rniga yangi Handler arxitekturasidan foydalanadi: har bir XAML elementi platforma handleri orqali mahalliy komponentga xaritalanadi.

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 XAML belgilashi UI ni deklarativ tavsiflaydi. ScrollView — aylantirish, VerticalStackLayout — vertikal joylashuv. Label, Entry (matn kiritish), Button — asosiy elementlar. CollectionView — elementlarni ko'rsatish uchun DataTemplate bilan virtualizatsiyalangan ro'yxat. Clicked hodisasi MainPage.xaml.cs code-behind dagi OnSubmitClicked metodiga bog'lanadi.

csharp
// MainPage.xaml.cs — C# mantiqi bilan 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 dan meros oladi. InitializeComponent() XAML belgilashini yuklaydi. NameEntry.Text?.Trim() — xavfsiz kirish uchun null-conditional operator (?.). DisplayAlert — mahalliy dialog. ItemsView.ItemsSource — kolleksiyaga Binding. async/await asinxron yuklash uchun. MVVM (Model-View-ViewModel) arxitekturasi murakkab loyihalar uchun tavsiya etiladi.

Mobil ishlanmada C#

C# mobil ishlanmasi uchta yondashuvni taklif qiladi: .NET MAUI (kross-platform UI), Xamarin (eskirgan) va Unity (o'yinlar). .NET MAUI — yangi loyihalar uchun tavsiya etilgan yo'l. C# ilovasi Intermediate Language (IL) ga kompilyatsiya qilinadi, NativeAOT (.NET MAUI) yoki Mono (Xamarin) uni mahalliy ARM kodiga aylantiradi. iOS AOT kompilyatsiyasini talab qiladi — JIT Apple siyosati bilan taqiqlangan.

Mahalliy API larga kirish

.NET MAUI platforma imkoniyatlari bilan ishlash uchun interfeyslar orqali yagona API larni ta'minlaydi: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Platforma uchun maxsus kod uchun shartli kompilyatsiya (#if ANDROID, #if IOS) yoki partial class ishlatiladi.

csharp
// .NET MAUI da DI bilan geolokatsiya
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($"Joylashuv xatosi: {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 xizmati DI (IGeolocation bog'liqlik inyeksiyasi) dan foydalanadi. CheckAndRequestPermission geolokatsiya ruxsatini tekshiradi va so'raydi. GetLastKnownLocationAsync — tezkor (lekin har doim ham aniq emas) javob, GetLocationAsync — aniqlik va kutish vaqti parametrlari bilan so'rov. null tekshiruvlari (location == null) nullable reference types bilan. try-catch platforma istisnolarini boshqaradi.

Mobil qurilmalarda C# samaradorligi

C# mobil qurilmalarda Android da Java/Kotlin va iOS da Swift bilan taqqoslanadigan samaradorlikni ko'rsatadi. NativeAOT (.NET 8+) C# ni IL oraliq bosqichisiz to'g'ridan-to'g'ri mahalliy kodga kompilyatsiya qiladi — bu ishga tushirish vaqtini 50% kamaytiradi va xotira sarfini pasaytiradi. .NET MAUI da GC qisqa pauzalar bilan mobil platformalar uchun optimallashtirilgan (Workstation GC). APK hajmi — ~20-30 MB (NativeAOT bilan).

ParametrXamarin.NET MAUI
ArxitekturaXamarin.Android + Xamarin.iOSYagona .csproj loyihasi
UI renderlashRenderer (Xamarin.Forms)Handler (.NET MAUI)
KompilyatsiyaMono JIT (Android), AOT (iOS)NativeAOT (barcha platformalar)
StatusQo'llab-quvvatlash rejimiFaol rivojlanish
PlatformalarAndroid, iOS, WindowsAndroid, iOS, Windows, macOS, Tizen

.NET platformasi va CLR

.NET platformasi — boshqariladigan kodni bajarish uchun ekotizim, unga CLR (Common Language Runtime), BCL (Base Class Library), server ishlanmasi uchun ASP.NET Core va mobil ilovalar uchun .NET MAUI kiradi. .NET 8+ — barcha turdagi ilovalar uchun yagona platforma: mobil, desktop, veb, bulut, IoT, O'yinlar (Unity).

CLR — CIL (Common Intermediate Language) kodini bajaruvchi virtual mashina. C#, VB.NET, F# CIL ga kompilyatsiya qilinadi. CLR ning JIT-kompilyatori metodning birinchi chaqiruvida CIL ni mashina kodiga aylantiradi. NativeAOT (oldindan kompilyatsiya) CIL ni qurish bosqichida mahalliy kodga kompilyatsiya qiladi — JIT cheklangan bo'lishi mumkin bo'lgan mobil platformalar (iOS) uchun ideal.

GC .NET axlat yig'uvchisi — generational (avlodlar 0, 1, 2), foydalanilmayotgan ob'ektlarni avtomatik bo'shatadi. Mobil ilovalar uchun minimal pauzalar bilan Workstation GC tavsiya etiladi. GC alohida ipda sodir bo'ladi, UI ipini bloklamaydi. Background GC — interaktiv ilovalar uchun pauzalarni minimallashtiruvchi fon yig'uvchisi.

C# dasturchisi vositalari

C# dasturchisi vositalari Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider ni o'z ichiga oladi. Visual Studio 2022 — XAML dizayneri, boshqariladigan va mahalliy kod tuzatuvchisi, CPU/xotira profilchisi bilan asosiy IDE. .NET SDK csc kompilyatori, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test) ni o'z ichiga oladi.

NuGet — JS uchun npm ga o'xshash .NET paket menejeri. CommunityToolkit.Maui (UI komponentlari), SQLite-net (MB), Firebase Cloud Messaging, ZXing.Net.Maui (QR kodlari) ni o'z ichiga olgan 300 000+ paket. .NET MAUI Community Toolkit — rivojlanishni tezlashtirish uchun xatti-harakatlar, konvertorlar, animatsiyalar to'plami. RestSharp va Refit — HTTP mijozlari. Prism va MVVM Community Toolkit — arxitektura freymvorklari.

xml
<!-- .csproj — .NET MAUI loyihasi konfiguratsiyasi -->
<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 fayli — .NET MAUI loyihasining konfiguratsiyasi. TargetFrameworks maqsadli platformalarni sanab o'tadi. UseMaui MAUI SDK ni yoqadi. PackageReference — NuGet dan bog'liqliklar. CommunityToolkit.Maui — UI komponentlari (tostlar, snackbarlar, Popup). sqlite-net-pcl — mahalliy MB. Refit — interfeyslarga asoslangan tiplangan HTTP mijoz. dotnet build/publish ilovani barcha platformalar uchun quradi.

Tez-tez beriladigan savollar

C# nima?

C# — Microsoft dan (2000) ob'ektga yo'naltirilgan dasturlash tili, .NET (CLR) platformasida ishlaydi. Xamarin va .NET MAUI orqali mobil ishlanma uchun ishlatiladi. Qattiq statik tiplash, avtomatik xotira boshqaruvi (GC), LINQ, async/await va generiklarni birlashtiradi. TIOBE indeksida (2026) 4-o'rinda. Anders Xeylsberg tomonidan ishlab chiqilgan.

Xamarin .NET MAUI dan nima bilan farq qiladi?

Xamarin — o'tmishdoshi (2011-2024), loyihalarni Xamarin.Android va Xamarin.iOS ga ajratardi. .NET MAUI (2022+) — umumiy XAML belgilashi, Renderer o'rniga Handler arxitekturasi va 5 platforma qo'llab-quvvatlashi (iOS, Android, Windows, macOS, Tizen) bilan yagona .csproj loyihasi. Xamarin qo'llab-quvvatlash rejimiga o'tdi, yangi loyihalar .NET MAUI da yaratiladi. NativeAOT faqat .NET MAUI da mavjud.

C# mobil platformalarda qanday ishlaydi?

C# CIL (Common Intermediate Language) ga kompilyatsiya qilinadi, NativeAOT (.NET MAUI) yoki Mono (Xamarin) uni mahalliy ARM kodiga aylantiradi. Android IL ni bajarish uchun Mono runtime (Xamarin) yoki NativeAOT (.NET MAUI) dan foydalanadi. iOS AOT kompilyatsiyasini talab qiladi — JIT Apple tomonidan taqiqlangan. .NET MAUI interfeyslar orqali platforma amalga oshirishi bilan kamera, GPS, sensorlar uchun yagona API larni ta'minlaydi.

C# qanday ma'lumot turlarini qo'llab-quvvatlaydi?

C# turlarni value types (int, double, bool, char, struct, enum — stek) va reference types (string, class, interface, array, delegate, record — yig'im) ga ajratadi. Nullable turlar (int?) value types uchun null ga ruxsat beradi. record (C# 9) — qiymatga asoslangan tenglik bilan o'zgarmas reference type. record struct (C# 10) — value versiyasi. dynamic — dinamik tiplash. var — kompilyator tomonidan tur chiqarish.

C# mobil ishlanmasi uchun qanday vositalar ishlatiladi?

Visual Studio 2022 (Windows) va Visual Studio for Mac — XAML dizayneri, tuzatuvchi va profilchi bilan asosiy IDE. .NET SDK — csc kompilyatori, dotnet CLI, MSBuild. NuGet — paket menejeri (300 000+). CommunityToolkit.Maui — UI komponentlari. JetBrains Rider — muqobil IDE. Test uchun: xUnit, NUnit, Moq. CI/CD uchun: Azure DevOps, GitHub Actions.

Xulosa

  • C# — GC, LINQ va qattiq tiplash bilan .NET platformasi uchun Microsoft dan ob'ektga yo'naltirilgan til
  • .NET MAUI — yagona loyiha, Handler arxitekturasi va 5 platforma bilan Xamarin vorisi
  • XAML — C# da code-behind bilan barcha platformalar uchun umumiy deklarativ UI belgilash
  • LINQ — lazy evaluation bilan kolleksiyalar, MB va XML uchun o'rnatilgan so'rov tili
  • NativeAOT — ishga tushirish vaqtini 50% kamaytiruvchi mahalliy kodga oldindan kompilyatsiya
  • NuGet — .NET MAUI va Xamarin uchun 300 000+ kutubxona bilan paket menejeri
  • Visual Studio va dotnet CLI — qurish, test va nashr qilish uchun asosiy vositalar

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing