English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تدريب C# الأساسي

تدريب C# المتقدم

C# موجه البرمجة (OOP)

النوع الثابت، الطريقة، المحول البنائي، الحقل في C#

في C#، يعني الثبات عدم القدرة على إنشاء محتوى يمكن إنشاؤه. لا يمكنك إنشاء نموذج للنوع الثابت، ولا يمكنك استخدام النموذج لتحديد الوصول إلى العضو الثابت.

يمكن استخدام الكلمة المفتاحية static لتعريف الكائنات، المتغيرات، الطرق، الخصائص، العمليات، الأحداث والمحولات كثابتة.

النوع الثابت

تطبيق الكلمة المفتاحية static قبل اسم الفئة وبعد ميزة الوصول، يجعل الفئة ثابتة. تم تعريف فئة ثابتة تحتوي على حقول ثابتة وطرق.

public static class Calculator
{
    private static int _resultStorage = 0;
    
    public static string Type = "Arithmetic";
    public static int Sum(int num1, int num2)
    {
        return num1 + num2;
    {}
    public static void Store(int result)
    {
        _resultStorage = result;
    {}
{}

الفئة Calculator هي ثابتة. جميع أعضاؤها ثابتون.

لا يمكنك إنشاء نموذج للنوع الثابت. لذا يمكنك استخدام اسم الفئة ClassName.MemberName للوصول إلى أعضاء النوع الثابت، كما يلي.

class Program
{
    static void Main(string[] args)
    {
        var result = Calculator.Sum(10, 25); // استدعاء الطريقة الثابتة
        Calculator.Store(result); 
        var calcType = Calculator.Type; // الوصول إلى المتغير الثابت
        Calculator.Type = "Scientific"; // تعيين قيمة المتغير الثابت
    {}
{}

قواعد النوع الثابت

  1. لا يمكن إنشاء نماذج للنوع الثابت.

  2. يجب أن تكون جميع أعضاء النوع الثابت ثابتة. وإلا سيخرج المُعالج خطأ.

  3. يمكن للنوع الثابت أن يحتوي على متغيرات ثابتة، طرق ثابتة، خصائص ثابتة، عمليات ثابتة، أحداث ثابتة ومحولات بناء ثابتة.

  4. لا يمكن للنوع الثابت أن يحتوي على أعضاء حالية ومحولات بناء.

  5. لا يمكن أن تكون المحولات والمدمرة ثابتة

  6. لا يمكن استخدام var لتحديد أعضاء النوع الثابت. يجب أن تُحدد نوع العضو بشكل واضح بعد الكلمة المفتاحية static.

  7. النوع الثابت هو فئة مغلقة، لذا لا يمكن توريثها.

  8. لا يمكن للنوع الثابت النسخ من أي فئة أخرى.

  9. يمكن الوصول إلى أعضاء النوع الثابت باستخدام ClassName.MemberName (أي: اسم الفئة.اسم العضو).

  10. النوع الثابت سيظل في ذاكرة الذاكرة خلال دورة حياة مجال التطبيق الذي يحتوي على البرنامج.

ممثل غير ثابت في الفئات

الفئة العادية (الفئة غير الثابتة) يمكن أن تحتوي على طريقة ثابتة واحدة أو أكثر، وحقول، خصائص، أحداث، وأعضاء غير ثابتة أخرى.

يمكن استخدام بعض الأعضاء الثابتة لتعريف الفئة غير الثابتة بدلاً من إعلان الفئة كفئة ثابتة، وهو أمر عملي.

الحقول الثابتة

يمكن استخدام كلمة المفتاح static لتعريف حقل ثابت في الفئة غير الثابتة.

تشارك الحقول الثابتة للفئة غير الثابتة بين جميع المثالب. لذلك، سيتم反映 التغييرات التي يتم إجراؤها بواسطة أحد المثالب في المثالب الأخرى.

public class StopWatch
{
    public static int InstanceCounter = 0;
    // بناء المثال
    public StopWatch()
    {
    {}
{}
class Program
{
    static void Main(string[] args)
    {
        StopWatch sw1 = new StopWatch();
        StopWatch sw2 = new StopWatch();
        Console.WriteLine(StopWatch.NoOfInstances); // 2 
        StopWatch sw3 = new StopWatch();
        StopWatch sw4 = new StopWatch();
        Console.WriteLine(StopWatch.NoOfInstances); // 4
    {}
{}

الطريقة الثابتة

يمكنك تعريف طريقة ثابتة واحدة أو أكثر في الفئة غير الثابتة. يمكنك استدعاء الطريقة الثابتة دون إنشاء عنصر. لا يمكنك استخدام عنصر من الفئة غير الثابتة لاستدعاء الطريقة الثابتة.

يمكن للطريقة الثابتة استدعاء الطرق الثابتة الأخرى ووصول الأعضاء الثابتة. لا يمكنك الوصول إلى أعضاء الفئة غير الثابتة في الطريقة الثابتة.

class Program
{
    static int counter = 0;
    string name = "Demo Program";
    static void Main(string[] args)
    {
        counter++; // يمكن الوصول إلى الحقل الثابت
        Display("Hello World!"); // يمكن استدعاء الطريقة الثابتة
        name = "New Demo Program"; // خطأ: لا يمكن الوصول إلى العضو غير الثابت
        SetRootFolder("C:\MyProgram"); // خطأ: لا يمكن استدعاء الطريقة غير الثابتة
    {}
    static void Display(string text)
    {
        Console.WriteLine(text);
    {}
    public void SetRootFolder(string path) { }
{}

قواعد الطريقة الثابتة

  1. يمكن استخدام كلمة المفتاح static لتعريف طريقة ثابتة قبل نوع العودة، ثم تعريفها بعد ميزة الوصول.

  2. الطريقة الثابتة يمكن تعديلها، لكنها لا يمكن تعديلها.

  3. يمكن للطريقة الثابتة أن تحتوي على متغيرات ثابتة محلية.

  4. لا يمكن للطريقة الثابتة الوصول أو استدعاء المتغيرات غير الثابتة، إلا إذا تم تمريرها كمعاملات تم تمريرها بشكل واضح.

التركيب الثابت

يمكن للكلاس غير الثابت أن يحتوي على تركيب ثابت بدون معاملات، يمكن تعريفه باستخدام الكلمة المفتاحية static، دون ميزة الوصول مثل public، private وprotected.

يُظهر المثال أدناه الاختلاف بين التركيب الثابت وبناء المثال.

public class StopWatch
{
    // التركيب الثابت
    static StopWatch()
    {
        Console.WriteLine("تم استدعاء التركيب الثابت");
    {}
    // بناء المثال
    public StopWatch()
    {
        Console.WriteLine("تم استدعاء بناء المثال");
    {}
    // طريقة ثابتة
    public static void DisplayInfo()
    {
        Console.WriteLine("تم استدعاء DisplayInfo");
    {}
    // طريقة مثال
    public void Start() { }
    // طريقة مثال
    public void Stop() { }
{}

يحتوي الكلاس غير الثابت StopWatch على تركيب ثابت، وكذلك تركيب غير ثابت.

يُستدعى التركيب الثابت مرة واحدة فقط عند استخدام الطريقة الثابتة أو إنشاء المثال لأول مرة. كما يُظهر المثال أدناه، يتم استدعاء التركيب الثابت عند استدعاء الطريقة static لأول مرة. لن يتم استدعاء التركيب الثابت مرة أخرى عند استدعاء الطريقة static مرة أخرى.

StopWatch.DisplayInfo(); // هنا يتم استدعاء التركيب الثابت
StopWatch.DisplayInfo(); // هنا لم يتم استدعاء بناء المثال
الإخراج:
تم استدعاء التركيب الثابت.
تم استدعاء DisplayInfo
تم استدعاء DisplayInfo

يُستدعى التركيب الثابت عند إنشاء المثال لأول مرة، كما يُظهر المثال أدناه.

StopWatch sw1 = new StopWatch(); // أولاً يتم استدعاء التركيب الثابت، ثم بناء المثال 
StopWatch sw2 = new StopWatch(); // يتم استدعاء بناء المثال فقط 
StopWatch.DisplayInfo();
الإخراج:
تم استدعاء التركيب الثابت
تم استدعاء بناء المثال
تم استدعاء بناء المثال
تم استدعاء DisplayInfo

قواعد التركيب الثابتة

  1. وظيفة التركيب الثابتة يتم تعريفها باستخدام الكلمة المفتاحية static، دون استخدام ميزة الوصول public، private أو protected.

  2. يمكن للفئة غير الثابتة أن تحتوي على وظيفة ثابتة بدون معاملات. لا يسمح باستخدام وظيفة ثابتة مع معاملات.

  3. تتم إعادة تنفيذ الوظيفة الثابتة مرة واحدة فقط خلال الحياة. لذلك، إذا تم استخدام فئة في عدة أماكن، فإنه لا يمكن تحديد وقت تنفيذها في التطبيق.

  4. يمكن للوظيفة الثابتة الوصول فقط إلى العضويات الثابتة. لا يمكن أن تحتوي أو تستطيع الوصول إلى العضويات الحالة.

يخزن العضويات الثابتة في منطقة خاصة تسمى "الجمعية العالية" في ذاكرة الحاسوب. تشارك العضويات الثابتة للفئة غير الثابتة بين جميع حالات الفئة. لذلك، سيظهر التغيير الذي يتم إجراؤه في حالة واحدة في جميع الحالات الأخرى.