NoteTube

كورس #C كامل | شرح م أحمد ممدوح - منحة ITI #2
1:44:08

كورس #C كامل | شرح م أحمد ممدوح - منحة ITI #2

Syntax Error

6 chapters7 takeaways17 key terms5 questions

Overview

يقدم هذا الفيديو شرحًا مفصلاً للمكونات الأساسية لبيئة وقت تشغيل .NET (CLR) ودوره في تشغيل تطبيقات C#. يبدأ بشرح وظائف المكونات الرئيسية مثل محمل الفئات (Class Loader)، والمترجم الفوري (JIT Compiler)، وجامع القمامة (Garbage Collector)، ومدير الكود (Code Manager)، ومحرك الأمان (Security Engine)، ومدير الاستثناءات (Exception Manager)، ومدير الخيوط (Thread Manager). كما يتطرق إلى أهمية نظام الأنواع المشتركة (CTS) ودوره في توحيد الأنواع عبر لغات .NET المختلفة. يستعرض الفيديو أيضًا تاريخ إصدارات .NET Framework و C#، مع التركيز على كيفية إنشاء مشروع جديد في Visual Studio، وفهم بنية الكود الأساسية، والتعامل مع أنواع البيانات الأساسية (Value Types و Reference Types)، وكيفية قراءة وكتابة البيانات من وإلى وحدة التحكم، بالإضافة إلى شرح مفاهيم مثل تمرير القيم بالمرجع (Pass by Reference) باستخدام `ref` و `out`، والتعامل مع الاستثناءات باستخدام `TryParse`.

How was this?

Save this permanently with flashcards, quizzes, and AI chat

Chapters

  • محمل الفئات (Class Loader) مسؤول عن تحميل الفئات إلى الذاكرة عند الحاجة إليها فقط، مما يحسن كفاءة استخدام الذاكرة.
  • المترجم الفوري (JIT Compiler) يحول كود C# (IL) إلى كود أصلي (Native Code) أثناء وقت التشغيل.
  • جامع القمامة (Garbage Collector) يدير الذاكرة تلقائيًا، حيث يتتبع الذاكرة المحجوزة ويزيلها عندما لا تكون قيد الاستخدام، مما يريح المطورين من عبء إدارة الذاكرة يدويًا.
  • مدير الكود (Code Manager) يتعامل مع الكود المدار (Managed Code) وغير المدار (Unmanaged Code)، ويسمح بالتكامل مع لغات مثل C++.
  • محرك الأمان (Security Engine) يطبق قواعد الأمان أثناء وقت التشغيل.
  • مدير الاستثناءات (Exception Manager) يتعامل مع الأخطاء والاستثناءات التي تحدث أثناء تشغيل التطبيق، مما يسمح بمعالجتها وتجنب انهيار البرنامج.
  • مدير الخيوط (Thread Manager) يدعم إنشاء وإدارة خيوط متعددة داخل التطبيق الواحد.
فهم هذه المكونات ضروري لفهم كيفية عمل تطبيقات .NET على مستوى منخفض، وكيفية إدارة الذاكرة، وتحسين الأداء، والتعامل مع الأخطاء بفعالية.
مثال على دور جامع القمامة هو أنه يتتبع الذاكرة التي حجزتها في C++ باستخدام مؤشرات، وعندما لا يعود هناك أي مؤشر يشير إلى هذه الذاكرة، يقوم جامع القمامة بإلغاء تخصيصها تلقائيًا.
  • نظام الأنواع المشتركة (CTS) يحدد مجموعة قياسية من أنواع البيانات والقواعد التي يجب على جميع لغات .NET الالتزام بها، مما يضمن التوافق بين اللغات المختلفة.
  • يوجد اسمان لنوع البيانات: اسم لغة البرمجة (مثل `int` في C#) واسم CLR (مثل `System.Int32`).
  • تاريخ .NET Framework شهد تطورًا عبر إصدارات متعددة (2002، 2003، 2005، إلخ)، وكذلك لغة C# (C# 1، C# 2، إلخ).
  • ظهر .NET Core كبديل عبر المنصات، وتطور لاحقًا ليصبح .NET (بدءًا من .NET 5)، والذي يجمع بين مزايا .NET Framework و .NET Core.
  • الإصدارات الحديثة من Visual Studio (مثل 2015 وما بعدها) تدعم معظم ميزات C# الحديثة.
فهم CTS ضروري لكتابة كود متوافق مع لغات .NET الأخرى، ومعرفة تطور المنصة يساعد في اختيار الأدوات والإصدارات المناسبة للمشاريع.
عند تعريف متغير من نوع عدد صحيح في C#، يمكنك استخدام `int` (اسم C#) أو `System.Int32` (اسم CLR)، وكلاهما يشير إلى نفس النوع الأساسي.
  • يتم إنشاء مشروع C# جديد في Visual Studio باختيار قالب (Template) مناسب، مثل 'Console App'.
  • المشروع يتكون من ملفات كود (بامتداد .cs) وملفات أخرى، ويتم تنظيم الكود داخل مساحات أسماء (Namespaces).
  • كل تطبيق C# له نقطة دخول رئيسية (Entry Point)، وهي عادةً دالة `Main`، والتي يجب أن تكون `static`.
  • تُستخدم `Console.WriteLine()` لعرض النصوص على وحدة التحكم، و `Console.ReadLine()` لقراءة المدخلات من المستخدم.
  • يجب استخدام `using` لاستيراد مساحات الأسماء التي تحتوي على الفئات التي تريد استخدامها (مثل `System`).
تعلم كيفية إنشاء مشروع جديد وفهم بنيته الأساسية هو الخطوة الأولى لبدء كتابة أي تطبيق C#، وفهم كيفية الإدخال والإخراج ضروري للتفاعل مع المستخدم.
عند إنشاء مشروع Console App جديد، يقوم Visual Studio تلقائيًا بإنشاء ملف `Program.cs` يحتوي على دالة `Main` وعبارة `Console.WriteLine("Hello World!");`.
  • تنقسم أنواع البيانات في C# بشكل أساسي إلى أنواع قيمية (Value Types) وأنواع مرجعية (Reference Types).
  • أنواع القيم مثل `int`, `float`, `double`, `bool` تُخزن قيمتها مباشرة.
  • أنواع القيم يجب تهيئتها (Initialized) بقيمة قبل استخدامها، وإلا سيظهر خطأ وقت التصريف (Compile-time error).
  • القيم الحرفية (Literals) مثل الأرقام العشرية تُعتبر افتراضيًا `double`، ولتعريفها كـ `float` أو `decimal` يجب إضافة لاحقة (مثل `f` أو `m`).
  • يمكن استخدام الكلمة المفتاحية `default` للحصول على القيمة الافتراضية لنوع بيانات معين.
فهم أنواع البيانات وكيفية تخزينها واستخدامها بشكل صحيح هو أساس بناء أي برنامج، والتعامل مع القيم الحرفية بدقة يمنع الأخطاء.
عند تعريف متغير `float`، يجب كتابة `float myFloat = 3.14f;` وليس `float myFloat = 3.14;` لأن `3.14` يُفسر كـ `double` افتراضيًا.
  • لا يمكن تحويل أنواع البيانات بشكل ضمني (Implicit Conversion) من نوع ذي دقة أعلى إلى نوع ذي دقة أقل (مثل `double` إلى `int`) دون فقدان بيانات، مما يتطلب تحويلًا صريحًا (Explicit Conversion أو Casting).
  • يمكن تحويل سلسلة نصية (String) إلى نوع رقمي باستخدام دوال مثل `int.Parse()` أو `Convert.ToInt32()`.
  • دوال `Parse` ترمي استثناء (Exception) إذا فشلت عملية التحويل، مما قد يؤدي إلى انهيار البرنامج.
  • لتجنب انهيار البرنامج عند فشل التحويل، يُفضل استخدام `int.TryParse()` التي تعيد قيمة منطقية (true/false) تشير إلى نجاح العملية، وتضع القيمة المحولة في متغير مُمرر بالكلمة المفتاحية `out`.
  • مفهوم `Discard` (يُمثل بـ `_`) يُستخدم لتجاهل قيمة مُرجعة غير ضرورية، مثل القيمة المنطقية من `TryParse` إذا لم تكن بحاجة إليها.
التحويل الآمن بين أنواع البيانات ضروري لمنع فقدان البيانات والأخطاء غير المتوقعة، واستخدام `TryParse` يحسن من متانة التطبيق.
بدلاً من استخدام `int number = int.Parse(inputString);` الذي قد يسبب انهيارًا إذا كانت `inputString` غير صالحة، يُفضل استخدام `if (int.TryParse(inputString, out int number)) { ... } else { ... }`.
  • افتراضيًا، تُمرر أنواع القيم (Value Types) إلى الدوال عن طريق القيمة (Pass by Value)، مما يعني أن أي تغيير داخل الدالة لا يؤثر على المتغير الأصلي.
  • يمكن تمرير أنواع القيم بالمرجع (Pass by Reference) باستخدام الكلمة المفتاحية `ref`، مما يسمح للدالة بتعديل قيمة المتغير الأصلي.
  • الكلمة المفتاحية `out` تُستخدم أيضًا للتمرير بالمرجع، ولكنها تتطلب أن تكون القيمة المُمررة غير مهيأة (Uninitialized) وأن تقوم الدالة بتعيين قيمة لها قبل الخروج.
  • الفرق الرئيسي بين `ref` و `out` هو أن `ref` تتطلب تهيئة المتغير قبل تمريره، بينما `out` لا تتطلب ذلك وتضمن أن الدالة ستقوم بتعيين قيمة له.
  • يمكن استخدام `ref` و `out` معًا في نفس التطبيق، مما يوفر مرونة أكبر في تصميم الدوال التي تحتاج إلى تعديل قيم متعددة أو إرجاع قيم إضافية.
فهم الفرق بين التمرير بالقيمة والمرجع ضروري لكتابة دوال تتفاعل بشكل صحيح مع المتغيرات الخارجية، خاصة عند الحاجة لتعديل قيم متعددة.
عند استخدام دالة `Swap` لتغيير قيم متغيرين `a` و `b`، يجب تمريرهما باستخدام `ref` (مثل `Swap(ref a, ref b);`) لضمان تعديل القيم الأصلية.

Key takeaways

  1. 1CLR هو المحرك الأساسي لتشغيل تطبيقات .NET، ويفهم الكود الوسيط (IL) ويحوله إلى كود أصلي.
  2. 2إدارة الذاكرة التلقائية بواسطة Garbage Collector تقلل من الأخطاء الشائعة في لغات مثل C++.
  3. 3نظام الأنواع المشتركة (CTS) يضمن التوافق بين لغات .NET المختلفة.
  4. 4يجب تهيئة المتغيرات من أنواع القيم (Value Types) قبل استخدامها لتجنب الأخطاء.
  5. 5استخدام `TryParse` هو الطريقة الآمنة لتحويل المدخلات النصية إلى أنواع رقمية.
  6. 6الكلمات المفتاحية `ref` و `out` تسمح بتمرير المتغيرات بالمرجع، مما يمكن الدوال من تعديل قيمها الأصلية.
  7. 7فهم تاريخ إصدارات .NET و C# يساعد في اختيار التقنيات المناسبة للمشاريع.

Key terms

CLR (Common Language Runtime)Class LoaderJIT Compiler (Just-In-Time Compiler)Garbage CollectorManaged CodeUnmanaged CodeCTS (Common Type System)NamespaceValue TypeReference TypeLiteralParseTryParseExceptionrefoutDiscard (_)

Test your understanding

  1. 1ما هي المسؤولية الرئيسية لكل من Class Loader و Garbage Collector في CLR؟
  2. 2كيف يضمن Common Type System (CTS) التوافق بين لغات .NET المختلفة؟
  3. 3ما الفرق بين `int.Parse()` و `int.TryParse()` عند تحويل سلسلة نصية إلى عدد صحيح؟
  4. 4متى يجب استخدام الكلمة المفتاحية `ref` ومتى يجب استخدام `out` عند تمرير متغير إلى دالة؟
  5. 5لماذا يجب تهيئة المتغيرات من أنواع القيم (Value Types) قبل استخدامها في C#؟

Turn any lecture into study material

Paste a YouTube URL, PDF, or article. Get flashcards, quizzes, summaries, and AI chat — in seconds.

No credit card required

كورس #C كامل | شرح م أحمد ممدوح - منحة ITI #2 | NoteTube | NoteTube