C# هي لغة برمجة حديثة موجهة للكائنات من Microsoft، تشكل الأساس لمنصتي Xamarin و.NET MAUI في تطوير الأجهزة المحمولة. بفضل النظام البيئي الموحد لـ .NET، يمكن للمطورين إنشاء تطبيقات محمولة لنظامي iOS وAndroid باستخدام كود مشترك بلغة C# وXAML. وفقاً لمؤشر TIOBE (2026)، تحتل C# المرتبة الرابعة من حيث الشعبية بين جميع لغات البرمجة. تعلم المزيد في وثائق Microsoft C#.
النقاط الرئيسية
C# (تُنطق "سي شارب") هي لغة برمجة موجهة للكائنات مع نظام أنواع آمن، طورتها Microsoft في عام 2000 بقيادة أندرس هيلسبرغ. الاسم مستوحى من التدوين الموسيقي (dièse — رفع النغمة). تعمل 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# 1.0 (2000) — لغة OOP أساسية. C# 3.0 (2007) — LINQ، تعبيرات لامدا، طرق الامتداد. C# 6.0 (2015) — interpolation السلاسل، عامل null-conditional. C# 8.0 (2019) — أنواع المرجع القابلة للصفر (تفعيل الأمان من الصفر)، التدفقات غير المتزامنة، طرق الواجهة الافتراضية. C# 10 (2021) — global usings، مساحات الأسماء بنطاق الملف، record struct. C# 12 (2023) — المنشئات الأساسية، تعبيرات المجموعة، المعترضات. كل إصدار يجلب تحسينات ذات صلة بتطوير الأجهزة المحمولة.
| إصدار C# | السنة | الميزة الرئيسية | الأهمية لتطوير الأجهزة المحمولة |
|---|---|---|---|
| 3.0 | 2007 | LINQ، لامدا | عمل مبسط مع المجموعات وقواعد البيانات |
| 6.0 | 2015 | ?. (null-conditional)، interpolation السلاسل | وصول آمن للخصائص، سلاسل مقروءة |
| 8.0 | 2019 | أنواع المرجع القابلة للصفر، التدفقات غير المتزامنة | الأمان من الصفر، تدفقات بيانات غير متزامنة |
| 10 | 2021 | Record struct، global usings | أنواع القيمة، تقليل الكود المتكرر |
| 12 | 2023 | المنشئات الأساسية، تعبيرات المجموعة | تدوين موجز للفئات والمجموعات |
بناء جملة C# يشبه C، مكتوب بشكل صارم. كل شيء هو كائن، بما في ذلك البدائيات (int، double، bool — هي هياكل ترث ValueType). تقسم C# الأنواع إلى أنواع قيمة (int، double، bool، struct، enum — تُخزن على المكدس) وأنواع مرجع (string، class، interface، delegate، array، record — تُخزن على الكومة). الأنواع القابلة للصفر (int?) تسمح بقيمة null لأنواع القيمة.
C# تدعم الفئات (class)، الهياكل (struct)، السجلات (record)، الواجهات (interface)، التعدادات (enum) والمفوضين (delegate). record هو نوع مرجع غير قابل للتغيير مع مساواة قائمة على القيمة (سجلان متساويان إذا كانت جميع حقولهما متساوية). record struct — إصدار قيمة من record، تم تقديمه في C# 10. المنشئات الأساسية (C# 12) تجمع بين التصريح والتهيئة في سطر واحد.
// الأنواع والفئات الأساسية في C#
using System;
using System.Collections.Generic;
// سجل مع منشئ أساسي (C# 12)
public record User(int Id, string Name, string Email);
// فئة مع خصائص قابلة للصفر
public class AppConfig
{
public string AppName { get; init; }
public string? ApiUrl { get; set; } // nullable reference type
public int Version { get; init; }
// طريقة مع جسم تعبير
public string GetDisplayName() => $"{AppName} v{Version}";
}
// طريقة امتداد
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 مع المنشئ الأساسي يولد تلقائياً equals، hashCode، ToString، Deconstruct والنسخ مع. أدوات الضبط init-only (AppName) تسمح بتعيين قيمة فقط في المُهيئ. جسم التعبير (=>) هو تدوين موجز للطرق البسيطة. طريقة الامتداد IsValidEmail تضيف طريقة إلى string دون وراثة.
LINQ هي لغة استعلام مدمجة للمجموعات وقواعد البيانات وXML. LINQ to Objects — استعلامات لمجموعات IEnumerable. LINQ to SQL — لقواعد البيانات. LINQ to XML — لـ XML. يمكن أن يكون بناء الجملة استعلاماً (from u in users where u.Age > 18 select u) وطريقة (users.Where(u => u.Age > 18).Select(u => u)). التحميل البطيء (تنفيذ مؤجل): يتم تنفيذ الاستعلام عند التكرار، ليس عند التصريح.
// استعلامات 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"),
};
// بناء جملة الاستعلام
var filteredUsers = from u in users
where u.Email.Contains("example")
orderby u.Name
select u;
// بناء جملة الطريقة مع عمليات متعددة
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 يصفي المستخدمين حسب نطاق البريد الإلكتروني ويرتب حسب الاسم. بناء جملة الطريقة .Where().OrderBy().Select() — سلسلة طرق مكافئة لبناء جملة الاستعلام. GroupBy يجمع حسب نطاق البريد الإلكتروني. IAsyncEnumerable (C# 8) — إصدار غير متزامن من IEnumerable، مفيد لتحميل البيانات المتدفقة في تطبيقات الأجهزة المحمولة.
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 المنصة.
<!-- 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 في الكود الخلفي MainPage.xaml.cs.
// MainPage.xaml.cs — كود خلفي مع منطق 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;
}
}الكود الخلفي MainPage يرث من ContentPage. InitializeComponent() يحمل ترميز XAML. NameEntry.Text?.Trim() — عامل null-conditional (?.) للوصول الآمن. DisplayAlert — حوار أصلي. ItemsView.ItemsSource — Binding إلى المجموعة. async/await للتحميل غير المتزامن. يُوصى بنمط MVVM (Model-View-ViewModel) للمشاريع المعقدة.
تطوير الأجهزة المحمولة باستخدام C# يقدم ثلاثة نهج: .NET MAUI (UI عبر المنصات)، Xamarin (قديم) وUnity (ألعاب). .NET MAUI هو المسار الموصى به للمشاريع الجديدة. يتم ترجمة تطبيق C# إلى Intermediate Language (IL)، والذي يحوله NativeAOT (.NET MAUI) أو Mono (Xamarin) إلى كود ARM أصلي. iOS يتطلب ترجمة AOT — JIT محظور بسياسات Apple.
.NET MAUI يوفر واجهات API موحدة للعمل مع إمكانيات المنصة من خلال الواجهات: IAccelerometer، IBarometer، IBattery، IConnectivity، IDeviceInfo، IFilePicker، IGeolocation، IMediaPicker، IPermissions، ISpeechRecognizer، IVibration. للكود الخاص بالمنصة، يُستخدم الترجمة الشرطية (#if ANDROID، #if IOS) أو الفئة الجزئية.
// تحديد الموقع الجغرافي في .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) مع أنواع المرجع القابلة للصفر. try-catch يعالج استثناءات المنصة.
C# على الأجهزة المحمولة يظهر أداءً مماثلاً لـ Java/Kotlin على Android وSwift على iOS. NativeAOT (.NET 8+) يترجم C# مباشرة إلى كود أصلي دون مرحلة IL وسيطة — هذا يقلل وقت بدء التشغيل بنسبة 50% ويخفض استهلاك الذاكرة. GC في .NET MAUI محسّن للمنصات المحمولة مع فترات توقف قصيرة (Workstation GC). حجم APK — ~20-30 ميجابايت (مع NativeAOT).
| المعلمة | Xamarin | .NET MAUI |
|---|---|---|
| البنية | Xamarin.Android + Xamarin.iOS | مشروع واحد .csproj |
| تقديم UI | Renderer (Xamarin.Forms) | Handler (.NET MAUI) |
| الترجمة | Mono JIT (Android)، AOT (iOS) | NativeAOT (جميع المنصات) |
| الحالة | وضع الصيانة | تطوير نشط |
| المنصات | Android، iOS، Windows | Android، iOS، Windows، macOS، Tizen |
منصة .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# تشمل 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. أكثر من 300000 حزمة، بما في ذلك CommunityToolkit.Maui (مكونات UI)، SQLite-net (قاعدة بيانات)، Firebase Cloud Messaging، ZXing.Net.Maui (رموز QR). .NET MAUI Community Toolkit — مجموعة من السلوكيات والمحولات والرسوم المتحركة لتسريع التطوير. RestSharp وRefit — عملاء HTTP. Prism وMVVM Community Toolkit — أطر عمل معمارية.
<!-- .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 (إشعارات، snackbars، Popup). sqlite-net-pcl — قاعدة بيانات محلية. Refit — عميل HTTP مكتوب يعتمد على الواجهات. dotnet build/publish يبني التطبيق لجميع المنصات.
الأسئلة الشائعة
C# هي لغة برمجة موجهة للكائنات من Microsoft (2000)، تعمل على منصة .NET (CLR). تُستخدم لتطوير الأجهزة المحمولة عبر Xamarin و.NET MAUI. تجمع بين الكتابة الثابتة الصارمة، إدارة الذاكرة التلقائية (GC)، LINQ، async/await والأدوية العام. تحتل المرتبة الرابعة في مؤشر TIOBE (2026). طورها أندرس هيلسبرغ.
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# تُترجم إلى 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 موحدة للكاميرا ونظام تحديد المواقع وأجهزة الاستشعار مع تنفيذ منصة من خلال واجهات.
C# تقسم الأنواع إلى أنواع قيمة (int، double، bool، char، struct، enum — مكدس) وأنواع مرجع (string، class، interface، array، delegate، record — كومة). الأنواع القابلة للصفر (int?) تسمح بقيمة null لأنواع القيمة. record (C# 9) — نوع مرجع غير قابل للتغيير مع مساواة قائمة على القيمة. record struct (C# 10) — إصدار قيمة. dynamic — كتابة ديناميكية. var — استدلال النوع من المحول.
Visual Studio 2022 (Windows) وVisual Studio for Mac — IDE الرئيسي مع مصمم XAML ومصحح وملف تعريف. .NET SDK — محول csc، dotnet CLI، MSBuild. NuGet — مدير حزم (أكثر من 300000). CommunityToolkit.Maui — مكونات UI. JetBrains Rider — IDE بديل. للاختبار: xUnit، NUnit، Moq. لـ CI/CD: Azure DevOps، GitHub Actions.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.