C# — un limbaj de programare modern orientat pe obiecte de la Microsoft, care stă la baza platformelor Xamarin și .NET MAUI în dezvoltarea mobilă. Datorită ecosistemului unificat .NET, dezvoltatorii pot crea aplicații mobile pentru iOS și Android folosind cod comun în C# și XAML. Conform indicelui TIOBE (2026), C# ocupă locul 4 ca popularitate între toate limbajele de programare. Mai multe în documentația Microsoft C#.
Principalele
C# (pronunțat «si șarp») — un limbaj de programare orientat pe obiecte cu un sistem de tipuri sigur, dezvoltat de Microsoft în anul 2000 sub conducerea lui Anders Hejlsberg. Numele este inspirat din notația muzicală (diez — ridicarea tonului). C# funcționează pe platforma .NET, care include Common Language Runtime (CLR) și o bibliotecă extinsă de clase (BCL — Base Class Library).
În dezvoltarea mobilă, C# este utilizat prin două tehnologii: Xamarin (2011–2024) și succesorul său .NET MAUI (2022+). Xamarin permitea crearea de aplicații native Android și iOS cu cod C# comun, separând proiectele pe platforme. .NET MAUI unește toate platformele într-un singur proiect cu marcare XAML comună și acces la API-uri native prin interfețe de platformă.
Caracteristica cheie a C# — tipizare statică strictă cu posibilitatea de expediere dinamică prin dynamic, cuvântul cheie var (inferență de tip) și un sistem puternic de generice. C# este un limbaj complet gestionat: memoria este gestionată de colectorul de gunoi (GC), limitele array-urilor sunt verificate, variabilele neinițializate sunt interzise. Acest lucru face C# mai sigur decât C++ cu performanță comparabilă prin compilarea AOT.
C# 1.0 (2000) — limbaj OOP de bază. C# 3.0 (2007) — LINQ, expresii lambda, extension methods. C# 6.0 (2015) — string interpolation, operator null-conditional. C# 8.0 (2019) — nullable reference types (activarea siguranței null), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Fiecare versiune aduce îmbunătățiri relevante pentru dezvoltarea mobilă.
| Versiunea C# | An | Caracteristica cheie | Semnificație pentru dezvoltarea mobilă |
|---|---|---|---|
| 3.0 | 2007 | LINQ, lambda | Lucru simplificat cu colecții și baze de date |
| 6.0 | 2015 | ?. (null-conditional), string interpolation | Acces sigur la proprietăți, șiruri lizibile |
| 8.0 | 2019 | Nullable reference types, async streams | Null safety, fluxuri asincrone de date |
| 10 | 2021 | Record struct, global usings | Tipuri de valoare, reducerea boilerplate-ului |
| 12 | 2023 | Primary constructors, collection expressions | Scriere concisă a claselor și colecțiilor |
Sintaxa C# — asemănătoare cu C, strict tipizată. Totul este un obiect, inclusiv primitivele (int, double, bool — sunt structuri care moștenesc ValueType). C# împarte tipurile în value types (int, double, bool, struct, enum — stocate pe stivă) și reference types (string, class, interface, delegate, array, record — stocate în heap). Tipurile nullable (int?) permit null pentru value types.
C# suportă clase (class), structuri (struct), înregistrări (record), interfețe (interface), enumerări (enum) și delegați (delegate). record — un reference type imutabil cu egalitate bazată pe valoare (două record sunt egale dacă toate câmpurile lor sunt egale). record struct — versiunea de valoare a record, introdusă în C# 10. primary constructors (C# 12) combină declarația și inițializarea într-o singură linie.
// Tipuri de bază și clase C#
using System;
using System.Collections.Generic;
// Record cu primary constructor (C# 12)
public record User(int Id, string Name, string Email);
// Clasă cu proprietăți nullable
public class AppConfig
{
public string AppName { get; init; }
public string? ApiUrl { get; set; } // nullable reference type
public int Version { get; init; }
// Metodă cu 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(".");
}
// Utilizare
var user = new User(1, "Alice", "alice@example.com");
bool validEmail = user.Email.IsValidEmail();Înregistrarea User cu primary constructor generează automat equals, hashCode, ToString, Deconstruct și copierea with. Setter-ele init-only (AppName) permit setarea valorii doar în inițializator. Expression body (=>) — scriere concisă pentru metode simple. Extension method IsValidEmail adaugă o metodă la string fără moștenire.
LINQ — limbaj de interogare încorporat pentru colecții, baze de date, XML. LINQ to Objects — interogări pentru colecții IEnumerable. LINQ to SQL — pentru baze de date. LINQ to XML — pentru XML. Sintaxa poate fi query (from u in users where u.Age > 18 select u) și method (users.Where(u => u.Age > 18).Select(u => u)). Încărcare lentă (deferred execution): interogarea se execută la iterație, nu la declarație.
// Interogări LINQ la colecții
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"),
};
// Sintaxa query
var filteredUsers = from u in users
where u.Email.Contains("example")
orderby u.Name
select u;
// Sintaxa method cu mai multe operații
var result = users
.Where(u => u.Email.Contains("example"))
.OrderBy(u => u.Name)
.Select(u => new { u.Name, u.Email })
.ToList();
// GroupBy și agregare
var emailsByDomain = users
.GroupBy(u => u.Email.Split('@')[1])
.Select(g => new { Domain = g.Key, Count = g.Count() });
// LINQ cu flux asincron (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");
}Interogarea LINQ filteredUsers filtrează utilizatorii după domeniul email și sortează după nume. Method syntax .Where().OrderBy().Select() — lanț de metode, echivalent cu query syntax. GroupBy grupează după domeniul email. IAsyncEnumerable (C# 8) — versiunea asincronă a IEnumerable, utilă pentru încărcarea în flux a datelor într-o aplicație mobilă.
Xamarin (2011–2024) — prima platformă Microsoft pentru dezvoltare mobilă cross-platform în C#. Era compus din Xamarin.Android (Mono runtime pe nucleul Linux) și Xamarin.iOS (compilare AOT în ARM64 din cauza interzicerii JIT pe iOS). Xamarin.Forms — strat UI comun cu marcare XAML, traducând elementele în elemente native (Android View / iOS UIView).
.NET MAUI (.NET Multi-platform App UI) — succesorul Xamarin, lansat în 2022. Un singur proiect .csproj, o singură marcare XAML, un singur punct de intrare. Suportă 5 platforme: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI folosește noua arhitectură Handler în loc de Renderer: fiecare element XAML se mapează la o componentă nativă printr-un handler de platformă.
<!-- MainPage.xaml — UI declarativ .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>Marcarea XAML .NET MAUI descrie UI declarativ. ScrollView — derulare, VerticalStackLayout — aranjare verticală. Label, Entry (introducere text), Button — elemente de bază. CollectionView — listă virtualizată cu DataTemplate pentru afișarea elementelor. Evenimentul Clicked este legat de metoda OnSubmitClicked în code-behind MainPage.xaml.cs.
// MainPage.xaml.cs — code-behind cu logică 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 moștenește ContentPage. InitializeComponent() încarcă marcarea XAML. NameEntry.Text?.Trim() — operatorul null-conditional (?.) pentru acces sigur. DisplayAlert — dialog nativ. ItemsView.ItemsSource — Binding la o colecție. async/await pentru încărcare asincronă. Arhitectura MVVM (Model-View-ViewModel) este recomandată pentru proiecte complexe.
Dezvoltarea mobilă în C# oferă trei abordări: .NET MAUI (UI cross-platform), Xamarin (moștenit) și Unity (jocuri). .NET MAUI — calea recomandată pentru proiecte noi. Aplicația C# este compilată în Intermediate Language (IL), pe care NativeAOT (.NET MAUI) sau Mono (Xamarin) îl transformă în cod nativ ARM. iOS necesită compilare AOT — JIT este interzis de politicile Apple.
.NET MAUI oferă API-uri unificate pentru lucrul cu capacitățile platformei prin interfețe: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Pentru cod specific platformei se folosește compilarea condiționată (#if ANDROID, #if IOS) sau partial class.
// Geolocație în .NET MAUI cu 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($"Eroare de locație: {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;
}
}Serviciul LocationService folosește DI (injecție de dependență IGeolocation). CheckAndRequestPermission verifică și solicită permisiunea de geolocație. GetLastKnownLocationAsync — răspuns rapid (dar nu întotdeauna exact), GetLocationAsync — interogare cu parametri de precizie și timeout. Verificări null (location == null) cu nullable reference types. try-catch gestionează excepțiile platformei.
C# pe dispozitive mobile arată performanță comparabilă cu Java/Kotlin pe Android și Swift pe iOS. NativeAOT (.NET 8+) compilează C# direct în cod nativ fără etapa intermediară IL — aceasta reduce timpul de pornire cu 50% și scade consumul de memorie. GC în .NET MAUI este optimizat pentru platforme mobile cu pauze scurte (Workstation GC). Dimensiunea APK — ~20-30 MB (cu NativeAOT).
| Parametru | Xamarin | .NET MAUI |
|---|---|---|
| Arhitectură | Xamarin.Android + Xamarin.iOS | Proiect unic .csproj |
| Randare UI | Renderer (Xamarin.Forms) | Handler (.NET MAUI) |
| Compilare | Mono JIT (Android), AOT (iOS) | NativeAOT (toate platformele) |
| Status | Mod suport | Dezvoltare activă |
| Platforme | Android, iOS, Windows | Android, iOS, Windows, macOS, Tizen |
Platforma .NET — ecosistem pentru executarea codului gestionat, incluzând CLR (Common Language Runtime), BCL (Base Class Library), ASP.NET Core pentru dezvoltare server și .NET MAUI pentru aplicații mobile. .NET 8+ — platformă unică pentru toate tipurile de aplicații: mobile, desktop, web, cloud, IoT, Jocuri (Unity).
CLR — mașină virtuală care execută cod CIL (Common Intermediate Language). C#, VB.NET, F# sunt compilate în CIL. Compilatorul JIT al CLR transformă CIL în cod mașină la prima apelare a metodei. NativeAOT (compilare prealabilă) compilează CIL în cod nativ în faza de construire — ideal pentru platforme mobile unde JIT poate fi limitat (iOS).
Colectorul de gunoi GC .NET — generațional (generațiile 0, 1, 2), eliberează automat obiectele neutilizate. Pentru aplicații mobile se recomandă Workstation GC cu pauze minime. GC are loc într-un fir separat, fără a bloca firul UI. Background GC — colector de fond care minimizează pauzele pentru aplicații interactive.
Instrumente pentru dezvoltatorul C# includ Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider. Visual Studio 2022 — IDE principal cu designer XAML, depanator pentru cod gestionat și nativ, profilator CPU/memorie. .NET SDK include compilatorul csc, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test).
NuGet — manager de pachete .NET, analog cu npm pentru JS. Peste 300.000 de pachete, inclusiv CommunityToolkit.Maui (componente UI), SQLite-net (bază de date), Firebase Cloud Messaging, ZXing.Net.Maui (coduri QR). .NET MAUI Community Toolkit — set de comportamente, convertoare, animații pentru accelerarea dezvoltării. RestSharp și Refit — clienți HTTP. Prism și MVVM Community Toolkit — framework-uri arhitecturale.
<!-- .csproj — configurare proiect .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>Fișierul .csproj — configurația proiectului .NET MAUI. TargetFrameworks enumeră platformele țintă. UseMaui activează MAUI SDK. PackageReference — dependințe din NuGet. CommunityToolkit.Maui — componente UI (toast-uri, snackbar-uri, Popup). sqlite-net-pcl — bază de date locală. Refit — client HTTP tipizat bazat pe interfețe. dotnet build/publish construiește aplicația pentru toate platformele.
Întrebări frecvente
C# — un limbaj de programare orientat pe obiecte de la Microsoft (2000), care funcționează pe platforma .NET (CLR). Este utilizat pentru dezvoltare mobilă prin Xamarin și .NET MAUI. Combină tipizarea statică strictă, gestionarea automată a memoriei (GC), LINQ, async/await și generice. Ocupă locul 4 în indicele TIOBE (2026). Creat de Anders Hejlsberg.
Xamarin — predecesorul (2011-2024), împărțea proiectele în Xamarin.Android și Xamarin.iOS. .NET MAUI (2022+) — un singur proiect .csproj cu marcare XAML comună, arhitectură Handler în loc de Renderer și suport pentru 5 platforme (iOS, Android, Windows, macOS, Tizen). Xamarin a trecut în modul de suport, proiectele noi se creează pe .NET MAUI. NativeAOT este disponibil doar în .NET MAUI.
C# este compilat în CIL (Common Intermediate Language), pe care NativeAOT (.NET MAUI) sau Mono (Xamarin) îl transformă în cod nativ ARM. Android folosește Mono runtime (Xamarin) sau NativeAOT (.NET MAUI) pentru executarea IL. iOS necesită compilare AOT — JIT este interzis de Apple. .NET MAUI oferă API-uri unificate pentru cameră, GPS, senzori cu implementare de platformă prin interfețe.
C# împarte tipurile în value types (int, double, bool, char, struct, enum — stivă) și reference types (string, class, interface, array, delegate, record — heap). Tipurile nullable (int?) permit null pentru value types. record (C# 9) — reference type imutabil cu egalitate bazată pe valoare. record struct (C# 10) — versiunea de valoare. dynamic — tipizare dinamică. var — inferență de tip de către compilator.
Visual Studio 2022 (Windows) și Visual Studio for Mac — IDE-uri principale cu designer XAML, depanator și profilator. .NET SDK — compilatorul csc, dotnet CLI, MSBuild. NuGet — manager de pachete (peste 300.000). CommunityToolkit.Maui — componente UI. JetBrains Rider — IDE alternativ. Pentru testare: xUnit, NUnit, Moq. Pentru CI/CD: Azure DevOps, GitHub Actions.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și