C#: кључни појмови језика, .NET MAUI и Xamarin развој

Аутор: IT Sectr Објављено: 2026-02-10 Време читања: 12 мин

C# — модеран објектно-оријентисан програмски језик од Microsoft-а, који је основа за Xamarin и .NET MAUI платформе у мобилном развоју. Захваљујући јединственом .NET екосистему, програмери могу креирати мобилне апликације за iOS и Android користећи заједнички код у C# и XAML. Према TIOBE индексу (2026), C# заузима 4. место по популарности међу свим програмским језицима. Више у Microsoft C# документацији.

Главно

  • C# — објектно-оријентисан језик од Microsoft-а за .NET платформу
  • .NET MAUI — наследник Xamarin-а, јединствени пројекат за iOS, Android, Windows, macOS
  • XAML — декларативна UI ознака, заједничка за све .NET платформе
  • CLR — Common Language Runtime са JIT/AOT компилацијом и сакупљачем смећа
  • LINQ — Language Integrated Query за рад са колекцијама и базама података

Шта је 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# и еволуција

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.02007LINQ, ламбдеПоједностављен рад са колекцијама и базама
6.02015?. (null-conditional), string interpolationСигуран приступ својствима, читљиви стрингови
8.02019Nullable reference types, async streamsNull безбедност, асинхрони токови података
102021Record struct, global usingsValue типови, смањење boilerplate-а
122023Primary constructors, collection expressionsКонцизан запис класа и колекција

Синтакса C#: типови, класе и LINQ

Синтакса 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-а су једнака ако су им сва поља једнака). record struct — value верзија record-а, уведена у C# 10. primary constructors (C# 12) спајају декларацију и иницијализацију у један ред.

csharp
// Основни типови и класе 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 — Language Integrated Query

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): упит се извршава при итерацији, не при декларацији.

csharp
// 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 syntax
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// Method syntax са више операција
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 и .NET MAUI: архитектура

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.

xml
<!-- 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.

csharp
// 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# у мобилном развоју

C# мобилни развој нуди три приступа: .NET MAUI (вишеплатформски UI), Xamarin (стари) и Unity (игре). .NET MAUI — препоручени пут за нове пројекте. Апликација на C#-у се компилира у Intermediate Language (IL), који NativeAOT (.NET MAUI) или Mono (Xamarin) претварају у изворни ARM код. iOS захтева AOT компилацију — JIT је забрањен Apple-овим политикама.

Приступ изворним API-јима

.NET MAUI пружа јединствене API-је за рад са платформским могућностима кроз интерфејсе: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. За код специфичан за платформу користи се условна компилација (#if ANDROID, #if IOS) или partial class.

csharp
// Геолокација у .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# на мобилним уређајима

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, WindowsAndroid, iOS, Windows, macOS, Tizen

.NET платформа и CLR

.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# програмера

Алати 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 — архитектонски оквири.

xml
<!-- .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#?

C# — објектно-оријентисан програмски језик од Microsoft-а (2000), који ради на .NET (CLR) платформи. Користи се за мобилни развој кроз Xamarin и .NET MAUI. Комбинује строгу статичку типизацију, аутоматско управљање меморијом (GC), LINQ, async/await и генерике. Заузима 4. место у TIOBE индексу (2026). Развио га је Андерс Хејлсберг.

По чему се Xamarin разликује од .NET MAUI-ја?

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# ради на мобилним платформама?

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#?

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) — value верзија. dynamic — динамичка типизација. var — извођење типа од стране компилатора.

Који алати се користе за C# мобилни развој?

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.

Закључци

  • C# — објектно-оријентисан Microsoft-ов језик за .NET платформу са GC, LINQ и строгом типизацијом
  • .NET MAUI — наследник Xamarin-а са јединственим пројектом, Handler архитектуром и 5 платформи
  • XAML — декларативна UI ознака заједничка за све платформе са code-behind у C#-у
  • LINQ — уграђени упитни језик за колекције, базе података и XML са лењом обрадом
  • NativeAOT — претходна компилација у изворни код која смањује време покретања за 50%
  • NuGet — менаџер пакета са 300 000+ библиотека за .NET MAUI и Xamarin
  • Visual Studio и dotnet CLI — главни алати за изградњу, тестирање и објављивање

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође