C#: مفاهیم کلیدی زبان، توسعه با .NET MAUI و Xamarin

نویسنده: IT Sectr منتشر شده: 2026-02-10 زمان مطالعه: 12 دقیقه

C# — یک زبان برنامه‌نویسی مدرن شیءگرا از مایکروسافت است که پایه پلتفرم‌های Xamarin و .NET MAUI در توسعه موبایل می‌باشد. به لطف اکوسیستم یکپارچه .NET، توسعه‌دهندگان می‌توانند با استفاده از کد مشترک به زبان C# و XAML، برنامه‌های موبایل برای iOS و Android ایجاد کنند. بر اساس شاخص TIOBE (2026)، C# از نظر محبوبیت در میان تمام زبان‌های برنامه‌نویسی در رتبه ۴ قرار دارد. اطلاعات بیشتر در مستندات مایکروسافت C#.

نکات اصلی

  • C# — زبان شیءگرای مایکروسافت برای پلتفرم .NET
  • .NET MAUI — جانشین Xamarin، پروژه واحد برای iOS، Android، Windows، macOS
  • XAML — نشانه‌گذاری اعلانی UI، مشترک برای تمام پلتفرم‌های .NET
  • CLR — Common Language Runtime با کامپایل JIT/AOT و جمع‌آوری زباله
  • LINQ — Language Integrated Query برای کار با مجموعه‌ها و پایگاه داده

C# چیست؟

C# (تلفظ «سی شارپ») — یک زبان برنامه‌نویسی شیءگرا با سیستم نوع ایمن است که توسط مایکروسافت در سال ۲۰۰۰ به رهبری آندرس هیلزبرگ توسعه یافت. نام آن از نت‌نویسی موسیقی الهام گرفته شده است (دیز — افزایش نت). 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 streamsایمنی null، جریان‌های داده ناهمزمان
102021Record struct، global usingsانواع مقداری، کاهش کدهای تکراری
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?) برای value types مقدار null را مجاز می‌کنند.

انواع داده و کلاس‌ها

C# از کلاس‌ها (class)، ساختارها (struct)، رکوردها (record)، رابط‌ها (interface)، شمارش‌ها (enum) و نمایندگان (delegate) پشتیبانی می‌کند. record — یک reference type تغییرناپذیر با برابری مبتنی بر مقدار است (دو record برابر هستند اگر تمام فیلدهایشان برابر باشد). record struct — نسخه مقداری 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-کپی را تولید می‌کند. setterهای 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
var filteredUsers = from u in users
                     where u.Email.Contains("example")
                     orderby u.Name
                     select u;

// نحو method با چندین عملیات
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 با جریان ناهمزمان (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) — اولین پلتفرم مایکروسافت برای توسعه موبایل چندسکویی به زبان C#. شامل Xamarin.Android (Mono runtime بر روی هسته لینوکس) و 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 توسط خط مشی اپل ممنوع است.

دسترسی به 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 به کد بومی کامپایل می‌کند — این زمان راه‌اندازی را ۵۰٪ کاهش می‌دهد و مصرف حافظه را کم می‌کند. GC در .NET MAUI برای پلتفرم‌های موبایل با مکث‌های کوتاه بهینه شده است (Workstation GC). اندازه APK — حدود ۲۰-۳۰ مگابایت (با NativeAOT).

پارامترXamarin.NET MAUI
معماریXamarin.Android + Xamarin.iOSپروژه واحد .csproj
رندر UIRenderer (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# — یک زبان برنامه‌نویسی شیءگرا از مایکروسافت (2000) است که بر روی پلتفرم .NET (CLR) کار می‌کند. برای توسعه موبایل از طریق Xamarin و .NET MAUI استفاده می‌شود. نوع‌دهی ایستای قوی، مدیریت خودکار حافظه (GC)، LINQ، async/await و جنریک‌ها را ترکیب می‌کند. در شاخص TIOBE (2026) رتبه ۴ را دارد. توسط آندرس هیلزبرگ توسعه یافته است.

تفاوت Xamarin با .NET MAUI چیست؟

Xamarin — پیشین (2011-2024)، پروژه‌ها را به Xamarin.Android و Xamarin.iOS تقسیم می‌کرد. .NET MAUI (2022+) — یک پروژه .csproj با نشانه‌گذاری مشترک XAML، معماری Handler به جای Renderer و پشتیبانی از ۵ پلتفرم (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 توسط اپل ممنوع است. .NET MAUI APIهای یکپارچه برای دوربین، GPS، سنسورها با پیاده‌سازی پلتفرمی از طریق رابط‌ها فراهم می‌کند.

C# از چه نوع داده‌ای پشتیبانی می‌کند؟

C# انواع را به value types (int، double، bool، char، struct، enum — پشته) و reference types (string، class، interface، array، delegate، record —堆) تقسیم می‌کند. انواع Nullable (int?) برای value types مقدار null را مجاز می‌کنند. record (C# 9) — reference type تغییرناپذیر با برابری مبتنی بر مقدار. record struct (C# 10) — نسخه مقداری. dynamic — نوع‌دهی پویا. var — استنتاج نوع توسط کامپایلر.

چه ابزارهایی برای توسعه موبایل C# استفاده می‌شود؟

Visual Studio 2022 (ویندوز) و 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# — زبان شیءگرای مایکروسافت برای پلتفرم .NET با GC، LINQ و نوع‌دهی قوی
  • .NET MAUI — جانشین Xamarin با یک پروژه واحد، معماری Handler و ۵ پلتفرم
  • XAML — نشانه‌گذاری اعلانی UI مشترک برای همه پلتفرم‌ها با code-behind به زبان C#
  • LINQ — زبان پرس‌وجوی داخلی برای مجموعه‌ها، پایگاه داده و XML با lazy evaluation
  • NativeAOT — کامپایل پیش‌فرض به کد بومی که زمان راه‌اندازی را ۵۰٪ کاهش می‌دهد
  • NuGet — مدیر بسته با بیش از 300,000 کتابخانه برای .NET MAUI و Xamarin
  • Visual Studio و dotnet CLI — ابزارهای اصلی برای ساخت، تست و انتشار

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید