C#: konsep kunci bahasa, pengembangan .NET MAUI dan Xamarin

Penulis: IT Sectr Diterbitkan: 2026-02-10 Waktu membaca: 12 mnt

C# — bahasa pemrograman berorientasi objek modern dari Microsoft, yang menjadi dasar platform Xamarin dan .NET MAUI dalam pengembangan mobile. Berkat ekosistem .NET yang terpadu, pengembang dapat membuat aplikasi mobile untuk iOS dan Android menggunakan kode bersama dalam C# dan XAML. Menurut indeks TIOBE (2026), C# menempati peringkat ke-4 dalam popularitas di antara semua bahasa pemrograman. Selengkapnya di dokumentasi Microsoft C#.

Poin Utama

  • C# — bahasa berorientasi objek dari Microsoft untuk platform .NET
  • .NET MAUI — penerus Xamarin, satu proyek untuk iOS, Android, Windows, macOS
  • XAML — markup UI deklaratif, umum untuk semua platform .NET
  • CLR — Common Language Runtime dengan kompilasi JIT/AOT dan pengumpulan sampah
  • LINQ — Language Integrated Query untuk bekerja dengan koleksi dan basis data

Apa itu C#?

C# (diucapkan «si sharp») — bahasa pemrograman berorientasi objek dengan sistem tipe yang aman, dikembangkan oleh Microsoft pada tahun 2000 di bawah pimpinan Anders Hejlsberg. Nama ini terinspirasi dari notasi musik (kres — peningkatan nada). C# bekerja pada platform .NET, yang mencakup Common Language Runtime (CLR) dan pustaka kelas yang luas (BCL — Base Class Library).

Dalam pengembangan mobile, C# digunakan melalui dua teknologi: Xamarin (2011–2024) dan penerusnya .NET MAUI (2022+). Xamarin memungkinkan pembuatan aplikasi Android dan iOS native dengan kode C# bersama, memisahkan proyek platform. .NET MAUI menggabungkan semua platform dalam satu proyek dengan markup XAML bersama dan akses ke API native melalui antarmuka platform.

Fitur utama C# — pengetikan statis yang ketat dengan kemungkinan pengiriman dinamis melalui dynamic, kata kunci var (inferensi tipe) dan sistem generik yang kuat. C# adalah bahasa yang dikelola sepenuhnya: memori dikelola oleh pengumpul sampah (GC), batas array diperiksa, variabel yang belum diinisialisasi dilarang. Ini membuat C# lebih aman daripada C++ dengan kinerja yang sebanding melalui kompilasi AOT.

Versi C# dan evolusi

C# 1.0 (2000) — bahasa OOP dasar. C# 3.0 (2007) — LINQ, ekspresi lambda, extension methods. C# 6.0 (2015) — string interpolation, operator null-conditional. C# 8.0 (2019) — nullable reference types (mengaktifkan keamanan null), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Setiap versi menghadirkan peningkatan yang relevan untuk pengembangan mobile.

Versi C#TahunFitur KunciArti untuk Pengembangan Mobile
3.02007LINQ, lambdaPekerjaan yang disederhanakan dengan koleksi dan basis data
6.02015?. (null-conditional), string interpolationAkses aman ke properti, string yang dapat dibaca
8.02019Nullable reference types, async streamsKeamanan null, aliran data asinkron
102021Record struct, global usingsTipe nilai, pengurangan boilerplate
122023Primary constructors, collection expressionsPenulisan ringkas kelas dan koleksi

Sintaksis C#: tipe, kelas dan LINQ

Sintaksis C# — mirip C, diketik secara ketat. Semuanya adalah objek, termasuk primitif (int, double, bool — ini adalah struktur yang mewarisi ValueType). C# membagi tipe menjadi value types (int, double, bool, struct, enum — disimpan di stack) dan reference types (string, class, interface, delegate, array, record — disimpan di heap). Tipe nullable (int?) mengizinkan null untuk value types.

Tipe data dan kelas

C# mendukung kelas (class), struktur (struct), record (record), antarmuka (interface), enumerasi (enum) dan delegat (delegate). record — reference type yang tidak dapat diubah dengan kesetaraan berbasis nilai (dua record sama jika semua bidangnya sama). record struct — versi nilai dari record, diperkenalkan di C# 10. primary constructors (C# 12) menggabungkan deklarasi dan inisialisasi dalam satu baris.

csharp
// Tipe dasar dan kelas C#
using System;
using System.Collections.Generic;

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

// Kelas dengan properti nullable
public class AppConfig
{
    public string AppName { get; init; }
    public string? ApiUrl { get; set; } // nullable reference type
    public int Version { get; init; }

    // Metode dengan 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(".");
}

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

Record User dengan primary constructor secara otomatis menghasilkan equals, hashCode, ToString, Deconstruct dan with-copy. Setter init-only (AppName) memungkinkan pengaturan nilai hanya di penginisialisasi. Expression body (=>) — penulisan ringkas untuk metode sederhana. Extension method IsValidEmail menambahkan metode ke string tanpa pewarisan.

LINQ — Language Integrated Query

LINQ — bahasa kueri bawaan untuk koleksi, basis data, XML. LINQ to Objects — kueri ke koleksi IEnumerable. LINQ to SQL — ke basis data. LINQ to XML — ke XML. Sintaksis dapat berupa query (from u in users where u.Age > 18 select u) dan method (users.Where(u => u.Age > 18).Select(u => u)). Pemuatan lambat (deferred execution): kueri dijalankan saat iterasi, bukan saat deklarasi.

csharp
// Kueri LINQ ke koleksi
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"),
};

// Sintaksis query
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// Sintaksis method dengan beberapa operasi
var result = users
    .Where(u => u.Email.Contains("example"))
    .OrderBy(u => u.Name)
    .Select(u => new { u.Name, u.Email })
    .ToList();

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

// LINQ dengan aliran 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");
}

Kueri LINQ filteredUsers memfilter pengguna berdasarkan domain email dan mengurutkan berdasarkan nama. Method syntax .Where().OrderBy().Select() — rantai metode, setara dengan query syntax. GroupBy mengelompokkan berdasarkan domain email. IAsyncEnumerable (C# 8) — versi asinkron IEnumerable, berguna untuk streaming data dalam aplikasi mobile.

Xamarin dan .NET MAUI: arsitektur

Xamarin (2011–2024) — platform pertama Microsoft untuk pengembangan mobile lintas platform dalam C#. Terdiri dari Xamarin.Android (Mono runtime di atas kernel Linux) dan Xamarin.iOS (kompilasi AOT ke ARM64 karena larangan JIT di iOS). Xamarin.Forms — lapisan UI bersama dengan markup XAML, menerjemahkan elemen ke native (Android View / iOS UIView).

.NET MAUI (.NET Multi-platform App UI) — penerus Xamarin, dirilis pada tahun 2022. Satu proyek .csproj, satu markup XAML, satu titik masuk. Mendukung 5 platform: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen. .NET MAUI menggunakan arsitektur Handler baru sebagai pengganti Renderer: setiap elemen XAML dipetakan ke komponen native melalui handler platform.

xml
<!-- MainPage.xaml — UI deklaratif .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>

Markup XAML .NET MAUI menggambarkan UI secara deklaratif. ScrollView — pengguliran, VerticalStackLayout — tata letak vertikal. Label, Entry (input teks), Button — elemen dasar. CollectionView — daftar virtual dengan DataTemplate untuk menampilkan elemen. Acara Clicked terikat ke metode OnSubmitClicked di code-behind MainPage.xaml.cs.

csharp
// MainPage.xaml.cs — code-behind dengan logika 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 mewarisi ContentPage. InitializeComponent() memuat markup XAML. NameEntry.Text?.Trim() — operator null-conditional (?.) untuk akses aman. DisplayAlert — dialog native. ItemsView.ItemsSource — Binding ke koleksi. async/await untuk pemuatan asinkron. Arsitektur MVVM (Model-View-ViewModel) direkomendasikan untuk proyek yang kompleks.

C# dalam pengembangan mobile

Pengembangan mobile C# menawarkan tiga pendekatan: .NET MAUI (UI lintas platform), Xamarin (warisan) dan Unity (game). .NET MAUI — jalur yang direkomendasikan untuk proyek baru. Aplikasi C# dikompilasi ke Intermediate Language (IL), yang NativeAOT (.NET MAUI) atau Mono (Xamarin) ubah menjadi kode ARM native. iOS memerlukan kompilasi AOT — JIT dilarang oleh kebijakan Apple.

Akses ke API native

.NET MAUI menyediakan API terpadu untuk bekerja dengan kemampuan platform melalui antarmuka: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Untuk kode khusus platform digunakan kompilasi bersyarat (#if ANDROID, #if IOS) atau partial class.

csharp
// Geolokasi di .NET MAUI dengan 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($"Kesalahan lokasi: {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;
    }
}

Layanan LocationService menggunakan DI (injeksi dependensi IGeolocation). CheckAndRequestPermission memeriksa dan meminta izin geolokasi. GetLastKnownLocationAsync — respons cepat (tetapi tidak selalu akurat), GetLocationAsync — kueri dengan parameter akurasi dan batas waktu. Pemeriksaan null (location == null) dengan nullable reference types. try-catch menangani pengecualian platform.

Kinerja C# pada perangkat mobile

C# pada perangkat mobile menunjukkan kinerja yang sebanding dengan Java/Kotlin di Android dan Swift di iOS. NativeAOT (.NET 8+) mengkompilasi C# langsung ke kode native tanpa tahap IL perantara — ini mengurangi waktu startup sebesar 50% dan menurunkan konsumsi memori. GC di .NET MAUI dioptimalkan untuk platform mobile dengan jeda singkat (Workstation GC). Ukuran APK — ~20-30 MB (dengan NativeAOT).

ParameterXamarin.NET MAUI
ArsitekturXamarin.Android + Xamarin.iOSSatu proyek .csproj
Rendering UIRenderer (Xamarin.Forms)Handler (.NET MAUI)
KompilasiMono JIT (Android), AOT (iOS)NativeAOT (semua platform)
StatusMode dukunganPengembangan aktif
PlatformAndroid, iOS, WindowsAndroid, iOS, Windows, macOS, Tizen

Platform .NET dan CLR

Platform .NET — ekosistem untuk mengeksekusi kode yang dikelola, termasuk CLR (Common Language Runtime), BCL (Base Class Library), ASP.NET Core untuk pengembangan server dan .NET MAUI untuk aplikasi mobile. .NET 8+ — platform terpadu untuk semua jenis aplikasi: mobile, desktop, web, cloud, IoT, Game (Unity).

CLR — mesin virtual yang mengeksekusi kode CIL (Common Intermediate Language). C#, VB.NET, F# dikompilasi ke CIL. Kompilator JIT CLR mengubah CIL menjadi kode mesin pada panggilan pertama metode. NativeAOT (pra-kompilasi) mengkompilasi CIL ke kode native pada tahap pembangunan — ideal untuk platform mobile dimana JIT mungkin dibatasi (iOS).

Pengumpul sampah GC .NET — generasional (generasi 0, 1, 2), secara otomatis membebaskan objek yang tidak digunakan. Untuk aplikasi mobile, Workstation GC dengan jeda minimal direkomendasikan. GC terjadi di thread terpisah, tanpa memblokir thread UI. Background GC — pengumpul latar belakang yang meminimalkan jeda untuk aplikasi interaktif.

Alat pengembang C#

Alat pengembang C# mencakup Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider. Visual Studio 2022 — IDE utama dengan perancang XAML, debugger untuk kode yang dikelola dan native, profiler CPU/memori. .NET SDK mencakup kompilator csc, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test).

NuGet — manajer paket .NET, analog dengan npm untuk JS. 300.000+ paket, termasuk CommunityToolkit.Maui (komponen UI), SQLite-net (basis data), Firebase Cloud Messaging, ZXing.Net.Maui (kode QR). .NET MAUI Community Toolkit — kumpulan perilaku, konverter, animasi untuk mempercepat pengembangan. RestSharp dan Refit — klien HTTP. Prism dan MVVM Community Toolkit — kerangka arsitektur.

xml
<!-- .csproj — konfigurasi proyek .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>

Berkas .csproj — konfigurasi proyek .NET MAUI. TargetFrameworks mencantumkan platform target. UseMaui mengaktifkan MAUI SDK. PackageReference — dependensi dari NuGet. CommunityToolkit.Maui — komponen UI (toast, snackbar, Popup). sqlite-net-pcl — basis data lokal. Refit — klien HTTP yang diketik berdasarkan antarmuka. dotnet build/publish membangun aplikasi untuk semua platform.

Pertanyaan yang Sering Diajukan

Apa itu C#?

C# — bahasa pemrograman berorientasi objek dari Microsoft (2000), bekerja pada platform .NET (CLR). Digunakan untuk pengembangan mobile melalui Xamarin dan .NET MAUI. Menggabungkan pengetikan statis yang ketat, manajemen memori otomatis (GC), LINQ, async/await dan generik. Menempati peringkat ke-4 dalam indeks TIOBE (2026). Dikembangkan oleh Anders Hejlsberg.

Apa perbedaan Xamarin dengan .NET MAUI?

Xamarin — pendahulu (2011-2024), membagi proyek menjadi Xamarin.Android dan Xamarin.iOS. .NET MAUI (2022+) — satu proyek .csproj dengan markup XAML bersama, arsitektur Handler sebagai pengganti Renderer dan dukungan 5 platform (iOS, Android, Windows, macOS, Tizen). Xamarin beralih ke mode dukungan, proyek baru dibuat di .NET MAUI. NativeAOT hanya tersedia di .NET MAUI.

Bagaimana C# bekerja pada platform mobile?

C# dikompilasi ke CIL (Common Intermediate Language), yang NativeAOT (.NET MAUI) atau Mono (Xamarin) ubah menjadi kode ARM native. Android menggunakan Mono runtime (Xamarin) atau NativeAOT (.NET MAUI) untuk mengeksekusi IL. iOS memerlukan kompilasi AOT — JIT dilarang oleh Apple. .NET MAUI menyediakan API terpadu untuk kamera, GPS, sensor dengan implementasi platform melalui antarmuka.

Tipe data apa yang didukung C#?

C# membagi tipe menjadi value types (int, double, bool, char, struct, enum — stack) dan reference types (string, class, interface, array, delegate, record — heap). Tipe nullable (int?) mengizinkan null untuk value types. record (C# 9) — reference type yang tidak dapat diubah dengan kesetaraan berbasis nilai. record struct (C# 10) — versi nilai. dynamic — pengetikan dinamis. var — inferensi tipe oleh kompilator.

Alat apa yang digunakan untuk pengembangan mobile C#?

Visual Studio 2022 (Windows) dan Visual Studio for Mac — IDE utama dengan perancang XAML, debugger dan profiler. .NET SDK — kompilator csc, dotnet CLI, MSBuild. NuGet — manajer paket (300.000+). CommunityToolkit.Maui — komponen UI. JetBrains Rider — IDE alternatif. Untuk pengujian: xUnit, NUnit, Moq. Untuk CI/CD: Azure DevOps, GitHub Actions.

Kesimpulan

  • C# — bahasa berorientasi objek Microsoft untuk platform .NET dengan GC, LINQ dan pengetikan ketat
  • .NET MAUI — penerus Xamarin dengan satu proyek, arsitektur Handler dan 5 platform
  • XAML — markup UI deklaratif umum untuk semua platform dengan code-behind dalam C#
  • LINQ — bahasa kueri bawaan untuk koleksi, basis data dan XML dengan lazy evaluation
  • NativeAOT — pra-kompilasi ke kode native yang mengurangi waktu startup sebesar 50%
  • NuGet — manajer paket dengan 300.000+ pustaka untuk .NET MAUI dan Xamarin
  • Visual Studio dan dotnet CLI — alat utama untuk membangun, menguji dan mempublikasikan

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga