الفئات والبنيات (دليل البرمجة لـ #C)

الفئات والبنيات بنيتين أساسيتين لنظام النوع الشائع في .NET Framework. كل منهم عبارة عن بنية بيانات تقوم بتغليف مجموعة من البيانات والسلوكيات التي تنتمي معاً كوحدة منطقية. البيانات والسلوكيات عبارة عن أعضاء للفئة أو للبنية وتتضمن أساليبها, وأحداثها وخصائصها وهكذا كما هو موضح لاحقًا في هذا الموضوع.

تعريف الفئة أو البنية يشبه تصميم يستخدم لإنشاء مثيلات أو كائنات في وقت التشغيل. إذا قمت بتعريف فئة أو بنية تسمى Person، Person هو اسم النوع. إذا قمت بتعريف وتهييء متغير p من نوع Person، يقال لـ p كائن أو مثيل من Person. مثيلات متعددة من نفس النوع Person يمكن إنشاؤها ويمكن أن يكون لكل مثيل قيم مختلفة في الخصائص والحقول.

الفئة هي نوع مرجع. عندما يتم إنشاء كائن من فئة، يحتوي متغير الكائن على مرجع للذاكرة. عند تعيين مرجع الكائن لمتغير جديد يشير المتغير الجديد إلى الكائن الأصلي. التغييرات التي تتم على متغير واحد تنعكس على المتغير الآخر لأنهما يشيران إلى نفس البيانات.

بنية عبارة عن نوع قيمة. عندما يتم إنشاء بنية المتغير الذي يتم تعيينه للبنية يحتفظ بالبيانات الفعلية للبنية. عند تعيين البنية لمتغير آخر يتم نسخ البنية. وبالتالي، يحتوي المتغير الجديد والمتغير الأصلي على نسختين منفصلتين من نفس البيانات. التغييرات التي يتم إجراؤها على نسخة واحدة لا تؤثر على النسخة الأخرى.

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

لمزيد من المعلومات، راجع الفئات (دليل البرمجة لـ #C) ، الكائنات (دليل البرمجة لـ #C) ، و البنيات (دليل البرمجة لـ #C).

مثال

في المثال التالي تم تعريف MyCustomClass بثلاثة أعضاء في المستوى العلوي في مساحة الاسم ProgrammingGuide. يتم إنشاء مثيل (كائن) من MyCustomClass في الأسلوب Main في فئة Program، ثم يتم الوصول إلى خصائص وأساليب الكائن بواسطة استخدام عامل النقظة.

    namespace ProgrammingGuide
    {
        // Class definition.
        public class MyCustomClass
        {
            // Class members:
            // Property.
            public int Number { get; set; }

            // Method.
            public int Multiply(int num)
            {
                return num * Number;
            }

            // Instance Constructor.
            public MyCustomClass()
            {
                Number = 0;
            }
        }
        // Another class definition. This one contains
        // the Main method, the entry point for the program.
        class Program
        {
            static void Main(string[] args)
            {
                // Create an object of type MyCustomClass.
                MyCustomClass myClass = new MyCustomClass();

                // Set the value of a public property.
                myClass.Number = 27;

                // Call a public method.
                int result = myClass.Multiply(4);
            }
        }
    }

التغليف

التغليف يُشار إليه أحيانًا على أنه أول عمود أو مبدأ في البرمجة الكائنية. استناداً إلى مبدأ التغليف، يمكن للفئة أو للبنية تحديد كيفية الوصول إلى كل من أعضائها للتعليمات البرمجية خارج الفئة أو البنية. الأساليب والمتغيرات الغير معدة ليتم استخدامها من خارج الفئة أو التجميع يمكن إخفاؤها للحد من احتمال أخطاء التعليمات البرمجية أو عمليات الاستغلال الضار.

لمزيد من المعلومات حول الفئات, راجع الفئات (دليل البرمجة لـ #C) و الكائنات (دليل البرمجة لـ #C). لمزيد من المعلومات حول كيفية تصميم الفئات, راجع إرشادات تصميم نوع.

الأعضاء

يجب تعريف كل الحقول والثوابت والخصائص والأساليب والأحداث داخل النوع; تسمى هذه أعضاء الفئة أو البنية. في #C، لا توجد أية متغيرات عمومية أو أساليب عمومية كما في لغات أخرى. حتى نقطة بداية البرنامج, Main يجب تعريفها كأسلوب داخل فئة أو بنية. تتضمن القائمة التالية كل الأنواع من الأعضاء التي يمكن تعريفها في الفئة أو البنية.

‏إمكانية وصول ذوي الاحتياجات الخاصة

بعض الأساليب والخصائص الهدف منها أن يتم استدعاؤها أو الوصول إليها من تعليمات برمجية خارج الفئة أو البنية تعرف التعليمات البرمجية للعميل. الأساليب والخصائص الأخرى قابلة للاستخدام في الفئة أو البنية نفسها فقط. من المهم تقييد الوصول للتعليمات البرمجية الخاصة بك بحيث يمكن الوصول إليها من قبل التعليمات البرمجية للعميل المعين فقط. يجب عليك تحديد كيفية الوصول إلى الأنواع الخاصة بك وأعضاؤهم للتعليمات البرمجية للعميل باستخدام معدلات الوصول public و protected, internal و protected internal و private. إمكانية الوصول الافتراضية private. لمزيد من المعلومات، راجع معدلات الاتصال ( ارشادات البرمجة C# ).

الوراثة

تعتمد الفئات (ليس البنيات) مفهوم التوريث. الفئة المشتقة من فئة أخرى (الفئة الأساسية) تحتوي على كل الأعضاء العامة ومحمية والداخلية للفئة الأساسية فيما عدا الدوال الإنشائية الخاصة به أو الدوال المدمرة تلقائياً. للمزيد من المعلومات، راجع الوراثة (دليل البرمجة لـ #C) والتعدد (إرشادات برمجة C#).

يمكن تعريف الفئات كـ abstract، مما يعني أن واحد أو أكثر من أساليبها ليس له تطبيق. على الرغم من أنه لا يمكن إنشاء مثيل للفئات المجردة مباشرة, إنما تقوم بدور فئة أساسية للفئات الأخرى التي توفر التطبيق المفقود. يمكن أيضاً أن يتم تعريف الفئات كـ sealed لمنع الفئات الأخرى من وراثتها. لمزيد من المعلومات، راجع الفئات المجردة والفئات المغلقة وأعضاء الفئات (دليل البرمجة لـ #C).

الواجهات

يمكن للفئات والبنيات أن ترث واجهات متعددة. الوراثة من الواجهة تعني أنه يقوم النوع بتنفيذ كل الأساليب المعرّفة في الواجهة. لمزيد من المعلومات، راجع الواجهات (ارشادات البرمجة C#).

أنواع عامة

يمكن تعريف الفئات والبنيات مع معلمة نوع واحدة أو أكثر. التعليمات البرمجية للعميل توفر النوع عندما يقوم بإنشاء مثيل من النوع. على سبيل المثال الفئة List<T> في مساحة الاسم System.Collections.Generic يتم تعريفها مع نوع معلمة واحدة. التعليمات البرمجية للعميل تقوم بإنشاء مثيل من List<string> أو List<int> لتحديد النوع الذي ستحتوي عليه القائمة. لمزيد من المعلومات، راجع عام (إرشادات برمجة C#).

الأنواع الثابتة

يمكن أن يتم تعريف الفئات (ليس البنيات) كـ static. يمكن أن تحتوي الفئة الثابتة فقط أعضاء ثابتة ولا يمكن إنشاء مثيل باستخدام الكلمة الأساسية new. يتم تحميل نسخة واحدة من الفئة إلى الذاكرة عند تحميل البرنامج ويتم الوصول إلى أعضائها من خلال اسم الفئة. يمكن أن تحتوي كلاً من الفئات والبنيات على أعضاء ثابتة. لمزيد من المعلومات، راجع فئة عم ثابتة والثابتة فئة الأعضاء (C# البرمجة الدليل).

الأنواع المتداخلة

يمكن للفئات والبنيات أن تكون متداخلة في فئة أو بنية أخرى. لمزيد من المعلومات، راجع الأنواع المتداخلة.

الأنواع الجزئية

يمكنك تعريف جزء من الفئة أو البنية أو الأسلوب في أحد ملفات التعليمات البرمجية والجزء الآخر في ملف تعليمات برمجية منفصل. لمزيد من المعلومات, راجع الأساليب والفئات الجزئية.

مهيئات الكائن

يمكنك إنشاء مثيل وتهيئة كائن الفئة أو البنية ومجموعات الكائنات، دون استدعاء الدالة الإنشائية الخاصة بها بشكل واضح. لمزيد من المعلومات، راجع مهيآت الكائنات والمجموعات (دليل البرمجة لـ #C).

أنواع مجهولة

في الحالات التي لا يكون ملائماً أو ضرورياً إنشاء فئة مسماة، على سبيل المثال عندما يتم ملء قائمة ببنيات بيانات ولا يلزم عليك الاستمرار أو تمريرها إلى أسلوب آخر، استخدم أنواع مجهولة. لمزيد من المعلومات، راجع الأنواع المجهولة (ارشادات برمجة C#).

أساليب التوسيع

يمكنك توسيع الفئة دون إنشاء فئة مشتقة عن طريق إنشاء نوع منفصل يمكن استدعاء الأساليب الخاصة به كما لو أنها تنتمي إلى النوع الأصلي. لمزيد من المعلومات، راجع أساليب التوسيع (ارشادات برمجة C#).

المتغيرات المحلية ذات النوع المُختار ضمنياً

ضمن أسلوب الفئة أو البنية, يمكنك استخدام التنويع الضمني لإرشاد برنامج التحويل البرمجي لتحديد النوع الصحيح في وقت التحويل البرمجي. لمزيد من المعلومات، راجع المتغيرات المحلية ذات النوع المُختار ضمنياً (دليل البرمجة لـ #C).

مواصفات لغة #C

لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.

راجع أيضًا:

المبادئ

دليل البرمجة لـ #C