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# («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# 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# versiyasi | Yil | Asosiy xususiyat | Mobil ishlanma uchun ahamiyati |
|---|---|---|---|
| 3.0 | 2007 | LINQ, lambdalar | Kolleksiyalar va MB bilan soddalashtirilgan ish |
| 6.0 | 2015 | ?. (null-conditional), string interpolation | Xususiyatlarga xavfsiz kirish, o'qiladigan satrlar |
| 8.0 | 2019 | Nullable reference types, async streams | Null xavfsizligi, asinxron ma'lumot oqimlari |
| 10 | 2021 | Record struct, global usings | Value turlari, boilerplate ni qisqartirish |
| 12 | 2023 | Primary constructors, collection expressions | Sinflar va kolleksiyalarning ixcham yozuvi |
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.
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.
// 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 — 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.
// 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 (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.
<!-- 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.
// 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.
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.
.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.
// .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.
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).
| Parametr | Xamarin | .NET MAUI |
|---|---|---|
| Arxitektura | Xamarin.Android + Xamarin.iOS | Yagona .csproj loyihasi |
| UI renderlash | Renderer (Xamarin.Forms) | Handler (.NET MAUI) |
| Kompilyatsiya | Mono JIT (Android), AOT (iOS) | NativeAOT (barcha platformalar) |
| Status | Qo'llab-quvvatlash rejimi | Faol rivojlanish |
| Platformalar | Android, iOS, Windows | Android, iOS, Windows, macOS, Tizen |
.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 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.
<!-- .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# — 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 — 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# 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# 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.
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
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.