C#: dilin temel kavramları, .NET MAUI ve Xamarin geliştirme

Yazar: IT Sectr Yayınlanma: 2026-02-10 Okuma süresi: 12 dk

C#, Microsoft'un modern nesne yönelimli programlama dilidir ve mobil geliştirmede Xamarin ve .NET MAUI platformlarının temelini oluşturur. Birleşik .NET ekosistemi sayesinde geliştiriciler, ortak C# ve XAML kodu kullanarak iOS ve Android için mobil uygulamalar oluşturabilir. TIOBE endeksine (2026) göre C#, tüm programlama dilleri arasında popülerlikte 4. sırada yer almaktadır. Daha fazla bilgi için Microsoft C# belgelerine bakın.

Önemli noktalar

  • C# — .NET platformu için Microsoft'un nesne yönelimli dili
  • .NET MAUI — Xamarin'in halefi, iOS, Android, Windows, macOS için tek proje
  • XAML — tüm .NET platformlarında ortak olan bildirimsel UI işaretlemesi
  • CLR — JIT/AOT derlemesi ve çöp toplama ile Common Language Runtime
  • LINQ — koleksiyonlar ve veritabanlarıyla çalışmak için Language Integrated Query

C# nedir?

C# ("si sharp" olarak telaffuz edilir), Anders Hejlsberg liderliğinde Microsoft tarafından 2000 yılında geliştirilen, güvenli bir tür sistemine sahip nesne yönelimli bir programlama dilidir. Adı müzik notasyonundan (diyez — ses perdesini yükseltme) ilham almıştır. C#, Common Language Runtime (CLR) ve kapsamlı bir sınıf kitaplığı (BCL — Base Class Library) içeren .NET platformunda çalışır.

Mobil geliştirmede C#, iki teknoloji aracılığıyla kullanılır: Xamarin (2011–2024) ve halefi .NET MAUI (2022+). Xamarin, platforma özgü projeleri ayırarak ortak C# koduyla yerel Android ve iOS uygulamaları oluşturmayı mümkün kıldı. .NET MAUI, ortak XAML işaretlemesi ve platform arayüzleri aracılığıyla yerel API'lere erişimle tüm platformları tek bir projede birleştirir.

C#'ın temel bir özelliği, dynamic aracılığıyla dinamik dağıtım, var anahtar sözcüğü (tür çıkarımı) ve güçlü bir jenerikler sistemi ile katı statik tiplemedir. C# tamamen yönetilen bir dildir: bellek çöp toplayıcı (GC) tarafından yönetilir, dizi sınırları kontrol edilir, başlatılmamış değişkenler yasaktır. Bu, AOT derlemesi yoluyla karşılaştırılabilir performansla C#'ı C++'tan daha güvenli hale getirir.

C# sürümleri ve evrimi

C# 1.0 (2000) — temel OOP dili. C# 3.0 (2007) — LINQ, lambda ifadeleri, genişletme yöntemleri. C# 6.0 (2015) — dize ilişkilendirme, null-conditional operatörü. C# 8.0 (2019) — boş değer atanabilir başvuru türleri (null güvenliği), async streams, varsayılan arayüz yöntemleri. C# 10 (2021) — global usings, dosya kapsamlı ad alanları, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Her sürüm mobil geliştirmeyle ilgili iyileştirmeler getirir.

C# sürümüYılTemel özellikMobil geliştirme için önemi
3.02007LINQ, lambdalarKoleksiyonlar ve veritabanlarıyla basitleştirilmiş çalışma
6.02015?. (null-conditional), dize ilişkilendirmeGüvenli özellik erişimi, okunabilir dizeler
8.02019Boş değer atanabilir başvuru türleri, async streamsNull güvenliği, asenkron veri akışları
102021Record struct, global usingsDeğer türleri, azaltılmış kalıp kodu
122023Primary constructors, collection expressionsKısa sınıf ve koleksiyon gösterimi

C# sözdizimi: türler, sınıflar ve LINQ

C# sözdizimi C benzeridir, sıkı tür denetimlidir. İlkeller dahil her şey bir nesnedir (int, double, bool — bunlar ValueType'dan devralan yapılardır). C#, türleri değer türleri (int, double, bool, struct, enum — yığında saklanır) ve başvuru türleri (string, class, interface, delegate, array, record — öbekte saklanır) olarak ayırır. Boş değer atanabilir türler (int?), değer türleri için null'a izin verir.

Veri türleri ve sınıflar

C# sınıfları (class), yapıları (struct), kayıtları (record), arayüzleri (interface), numaralandırmaları (enum) ve temsilcileri (delegate) destekler. record, değer tabanlı eşitliğe sahip değişmez bir başvuru türüdür (iki kayıt, tüm alanları eşitse eşittir). record struct, C# 10'da tanıtılan record'un değer sürümüdür. primary constructors (C# 12), bildirim ve başlatmayı tek bir satırda birleştirir.

csharp
// C#'ta temel türler ve sınıflar
using System;
using System.Collections.Generic;

// Primary constructor ile kayıt (C# 12)
public record User(int Id, string Name, string Email);

// Boş değer atanabilir özelliklere sahip sınıf
public class AppConfig
{
    public string AppName { get; init; }
    public string? ApiUrl { get; set; } // nullable reference type
    public int Version { get; init; }

    // İfade gövdesi ile yöntem
    public string GetDisplayName() => $"{AppName} v{Version}";
}

// Genişletme yöntemi
public static class StringExtensions
{
    public static bool IsValidEmail(this string email) =>
        email.Contains("@") && email.Contains(".");
}

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

primary constructor ile User kaydı otomatik olarak equals, hashCode, ToString, Deconstruct ve with-kopyalama oluşturur. init-only ayarlayıcılar (AppName), yalnızca başlatıcıda değer ayarlamaya izin verir. İfade gövdesi (=>), basit yöntemler için kısa bir gösterimdir. Genişletme yöntemi IsValidEmail, kalıtım olmadan string'e bir yöntem ekler.

LINQ — Language Integrated Query

LINQ, koleksiyonlar, veritabanları, XML için yerleşik bir sorgu dilidir. LINQ to Objects — IEnumerable koleksiyonlarına sorgular. LINQ to SQL — veritabanlarına. LINQ to XML — XML'e. Sözdizimi sorgu (from u in users where u.Age > 18 select u) ve yöntem (users.Where(u => u.Age > 18).Select(u => u)) olabilir. Geç yükleme (ertelenmiş yürütme): sorgu bildirimde değil, yinelemede yürütülür.

csharp
// Koleksiyonlara LINQ sorguları
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"),
};

// Sorgu sözdizimi
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// Birden çok işlemle yöntem sözdizimi
var result = users
    .Where(u => u.Email.Contains("example"))
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Email })
    .ToList();

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

// Async akışı ile 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");
}

LINQ sorgusu filteredUsers, kullanıcıları e-posta alan adına göre filtreler ve ada göre sıralar. Yöntem sözdizimi .Where().OrderBy().Select(), sorgu sözdizimine eşdeğer bir yöntem zinciridir. GroupBy, e-posta alan adına göre gruplandırır. IAsyncEnumerable (C# 8), IEnumerable'un asenkron sürümüdür ve mobil uygulamalarda akış verisi yükleme için kullanışlıdır.

Xamarin ve .NET MAUI: mimari

Xamarin (2011–2024), C# ile çapraz platform mobil geliştirme için Microsoft'un ilk platformuydu. Xamarin.Android (Linux çekirdeği üzerinde Mono çalışma zamanı) ve Xamarin.iOS'ten (iOS'ta JIT yasağı nedeniyle ARM64'e AOT derlemesi) oluşuyordu. Xamarin.Forms, öğeleri yerel (Android View / iOS UIView) olarak çeviren XAML işaretlemesine sahip ortak bir UI katmanıydı.

.NET MAUI (.NET Multi-platform App UI), 2022'de yayınlanan Xamarin'in halefidir. Tek bir .csproj projesi, bir XAML işaretlemesi, bir giriş noktası. 5 platformu destekler: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI, Renderer yerine yeni Handler mimarisini kullanır: her XAML öğesi, bir platform işleyicisi aracılığıyla yerel bir bileşene eşlenir.

xml
<!-- MainPage.xaml — .NET MAUI bildirimsel UI -->
<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 işaretlemesi UI'yı bildirimsel olarak tanımlar. ScrollView — kaydırma, VerticalStackLayout — dikey düzen. Label, Entry (metin girişi), Button — temel öğeler. CollectionView — öğeleri görüntülemek için DataTemplate ile sanallaştırılmış liste. Clicked olayı, MainPage.xaml.cs kod gerisinde OnSubmitClicked yöntemine bağlanır.

csharp
// MainPage.xaml.cs — C# mantığı ile kod gerisi
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;
    }
}

Kod gerisi MainPage, ContentPage'den devralır. InitializeComponent() XAML işaretlemesini yükler. NameEntry.Text?.Trim() — güvenli erişim için null-conditional operatörü (?.). DisplayAlert — yerel iletişim kutusu. ItemsView.ItemsSource — koleksiyona bağlama. async/await asenkron yükleme için. Karmaşık projeler için MVVM (Model-View-ViewModel) deseni önerilir.

Mobil geliştirmede C#

C# mobil geliştirme üç yaklaşım sunar: .NET MAUI (çapraz platform UI), Xamarin (eski) ve Unity (oyunlar). .NET MAUI, yeni projeler için önerilen yoldur. C# uygulaması Intermediate Language (IL) olarak derlenir ve NativeAOT (.NET MAUI) veya Mono (Xamarin) bunu yerel ARM koduna dönüştürür. iOS, AOT derlemesi gerektirir — JIT, Apple politikaları tarafından yasaklanmıştır.

Yerel API'lere erişim

.NET MAUI, platform yetenekleriyle çalışmak için arayüzler aracılığıyla birleşik API'ler sağlar: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Platforma özgü kod için koşullu derleme (#if ANDROID, #if IOS) veya kısmi sınıf kullanılır.

csharp
// DI ile .NET MAUI'de coğrafi konum
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($"Konum hatası: {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 hizmeti DI (IGeolocation bağımlılık enjeksiyonu) kullanır. CheckAndRequestPermission, coğrafi konum iznini kontrol eder ve ister. GetLastKnownLocationAsync — hızlı (her zaman doğru olmayan) yanıt, GetLocationAsync — doğruluk ve zaman aşımı parametreleriyle istek. Boş değer atanabilir başvuru türleriyle null denetimleri (location == null). try-catch platform istisnalarını işler.

C#'ın mobil cihazlardaki performansı

C#, mobil cihazlarda Android'de Java/Kotlin ve iOS'ta Swift ile karşılaştırılabilir performans gösterir. NativeAOT (.NET 8+), C#'ı IL ara aşaması olmadan doğrudan yerel koda derler — bu, başlatma süresini %50 azaltır ve bellek tüketimini düşürür. .NET MAUI'deki GC, kısa duraklamalarla (Workstation GC) mobil platformlar için optimize edilmiştir. APK boyutu ~20-30 MB'dir (NativeAOT ile).

ParametreXamarin.NET MAUI
MimariXamarin.Android + Xamarin.iOSTek .csproj projesi
UI oluşturmaRenderer (Xamarin.Forms)Handler (.NET MAUI)
DerlemeMono JIT (Android), AOT (iOS)NativeAOT (tüm platformlar)
DurumBakım moduAktif geliştirme
PlatformlarAndroid, iOS, WindowsAndroid, iOS, Windows, macOS, Tizen

.NET platformu ve CLR

.NET platformu, yönetilen kodu yürütmek için bir ekosistemdir ve CLR (Common Language Runtime), BCL (Base Class Library), sunucu geliştirme için ASP.NET Core ve mobil uygulamalar için .NET MAUI'yi içerir. .NET 8+, tüm uygulama türleri için birleşik bir platformdur: mobil, masaüstü, web, bulut, IoT, oyunlar (Unity).

CLR, CIL (Common Intermediate Language) kodunu yürüten bir sanal makinedir. C#, VB.NET, F#, CIL olarak derlenir. CLR'nin JIT derleyicisi, ilk yöntem çağrısında CIL'yi makine koduna dönüştürür. NativeAOT (önceden derleme), CIL'yi derleme zamanında yerel koda derler — JIT'nin kısıtlanabileceği mobil platformlar (iOS) için idealdir.

.NET'in çöp toplayıcısı GC kuşaksaldır (0, 1, 2. kuşaklar), kullanılmayan nesneleri otomatik olarak serbest bırakır. Mobil uygulamalar için minimum duraklamalı Workstation GC önerilir. GC, UI iş parçacığını engellemeden ayrı bir iş parçacığında çalışır. Background GC, etkileşimli uygulamalar için duraklamaları en aza indiren bir arka plan toplayıcısıdır.

C# geliştirici araçları

C# geliştirici araçları Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider'ı içerir. Visual Studio 2022, XAML tasarımcısı, yönetilen ve yerel kod hata ayıklayıcısı, CPU/bellek profilleyicisi ile ana IDE'dir. .NET SDK, csc derleyicisini, dotnet CLI'yı (dotnet new, dotnet build, dotnet publish, dotnet test) içerir.

NuGet, JS için npm'e benzer şekilde .NET'in paket yöneticisidir. CommunityToolkit.Maui (UI bileşenleri), SQLite-net (veritabanı), Firebase Cloud Messaging, ZXing.Net.Maui (QR kodları) dahil 300.000'den fazla paket. .NET MAUI Community Toolkit, geliştirmeyi hızlandırmak için davranışlar, dönüştürücüler, animasyonlar setidir. RestSharp ve Refit — HTTP istemcileri. Prism ve MVVM Community Toolkit — mimari çerçeveler.

xml
<!-- .csproj — .NET MAUI proje yapılandırması -->
<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 dosyası, .NET MAUI proje yapılandırmasıdır. TargetFrameworks hedef platformları listeler. UseMaui, MAUI SDK'sını etkinleştirir. PackageReference, NuGet bağımlılıklarını belirtir. CommunityToolkit.Maui, UI bileşenleri (toast, snackbar, Popup) sağlar. sqlite-net-pcl yerel bir veritabanıdır. Refit, arayüz tabanlı tür belirtilmiş HTTP istemcisidir. dotnet build/publish, uygulamayı tüm platformlar için oluşturur.

Sıkça sorulan sorular

C# nedir?

C#, .NET platformunda (CLR) çalışan Microsoft'un (2000) nesne yönelimli programlama dilidir. Xamarin ve .NET MAUI aracılığıyla mobil geliştirme için kullanılır. Katı statik tipleme, otomatik bellek yönetimi (GC), LINQ, async/await ve jenerikleri birleştirir. TIOBE endeksinde (2026) 4. sıradadır. Anders Hejlsberg tarafından geliştirilmiştir.

Xamarin, .NET MAUI'den nasıl farklıdır?

Xamarin öncüldü (2011-2024), projeleri Xamarin.Android ve Xamarin.iOS olarak ayırıyordu. .NET MAUI (2022+), ortak XAML işaretlemesi, Renderer yerine Handler mimarisi ve 5 platform (iOS, Android, Windows, macOS, Tizen) desteğiyle tek bir .csproj projesidir. Xamarin bakım moduna geçti, yeni projeler .NET MAUI'de oluşturulur. NativeAOT yalnızca .NET MAUI'de kullanılabilir.

C# mobil platformlarda nasıl çalışır?

C#, NativeAOT (.NET MAUI) veya Mono'nun (Xamarin) yerel ARM koduna dönüştürdüğü CIL'ye (Common Intermediate Language) derlenir. Android, IL'yi yürütmek için Mono çalışma zamanını (Xamarin) veya NativeAOT'yi (.NET MAUI) kullanır. iOS, AOT derlemesi gerektirir — JIT, Apple tarafından yasaklanmıştır. .NET MAUI, arayüzler aracılığıyla platform uygulamasıyla kamera, GPS, sensörler için birleşik API'ler sağlar.

C# hangi veri türlerini destekler?

C#, türleri değer türleri (int, double, bool, char, struct, enum — yığın) ve başvuru türleri (string, class, interface, array, delegate, record — öbek) olarak ayırır. Boş değer atanabilir türler (int?), değer türleri için null'a izin verir. record (C# 9) — değer tabanlı eşitliğe sahip değişmez başvuru türü. record struct (C# 10) — değer sürümü. dynamic — dinamik tipleme. var — derleyici tür çıkarımı.

C# mobil geliştirme için hangi araçlar kullanılır?

Visual Studio 2022 (Windows) ve Visual Studio for Mac — XAML tasarımcısı, hata ayıklayıcı ve profilleyici ile ana IDE'ler. .NET SDK — csc derleyicisi, dotnet CLI, MSBuild. NuGet — paket yöneticisi (300.000+). CommunityToolkit.Maui — UI bileşenleri. JetBrains Rider — alternatif IDE. Test: xUnit, NUnit, Moq. CI/CD: Azure DevOps, GitHub Actions.

Özet

  • C# — GC, LINQ ve katı tipleme ile .NET platformu için Microsoft'un nesne yönelimli dili
  • .NET MAUI — tek proje, Handler mimarisi ve 5 platform ile Xamarin'in halefi
  • XAML — C# kod gerisi ile tüm platformlarda paylaşılan bildirimsel UI işaretlemesi
  • LINQ — geç değerlendirme ile koleksiyonlar, veritabanları ve XML için yerleşik sorgu dili
  • NativeAOT — yerel koda önceden derleme, başlatma süresini %50 azaltır
  • NuGet — .NET MAUI ve Xamarin için 300.000'den fazla kitaplıkla paket yöneticisi
  • Visual Studio ve dotnet CLI — derleme, test ve yayınlama için ana araçlar

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun