abstract (مرجع #C)

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

مثال

في هذا المثال، يجب على الفئة Square توفير تطبيق Area لأنها مشتقة من ShapesClass:


abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

تتضمن الفئات المجردة الميزات التالية:

  • لا يمكن إنشاء مثيل للفئة المجردة.

  • قد تحتوي الفئة المجردة على أساليب مجردة و accessors مجردة.

  • لا يمكن تعديل الفئة المجردة بالمعدّل sealed (مرجع #C) لأن للمعدّلين معنين معاكسين. المعدّل sealed يمنع الوراثة للفئة والمعدّل abstract يتطلب أن تكون الفئة موروثة.

  • يجب أن تتضمن الفئة الغير مجردة المشتقة من الفئة المجردة تطبيقات فعلية لكل الأساليب المجردة و accessors المجردة الموروثة.

استخدم المعدّل abstract في تعريف الأسلوب أو الخاصية للإشارة إلى أن الأسلوب أو الخاصية لا تحتوي على تطبيق.

تتضمن الأساليب المجردة الميزات التالية:

  • الأسلوب المجرد ضمنياً يكون أسلوبًا ظاهريًا.

  • تعريف الأسلوب المجرد يكون مسموحاً فقط في الفئات المجردة.

  • لأن تعريف الأسلوب المجرد لا يوفر تطبيق فعلي أي أنه ليس هناك أي نص أسلوب، ببساطة ينتهي تعريف الأسلوب بفاصلة منقوطة ولا توجد أية أقواس متعرجة ({}) بعد التوقيع. فعلى سبيل المثال:

    public abstract void MyMethod();
    

    يتم توفير التطبيق بواسطة أسلوب متجاوز override (مرجع #C)، وهو عضو في فئة غير مجردة.

  • من الخطأ استخدام المعدّلات static أو virtual في تعريف أسلوب مجرد.

الخصائص المجردة تتصرف مثل الأساليب المجردة، باستثناء الاختلافات في بناء جملة التعريف والاستدعاء.

  • من الخطأ استخدام معدل التشغيل abstract في خاصية ثابتة.

  • يمكن أن يتم تجاوز خاصية متوارثة مجردة في فئة مشتقة عن طريق تضمين المعدّل override في تعريف الخاصية .

لمزيد من المعلومات حول الفئات المشتقة, راجع الفئات المجردة والفئات المغلقة وأعضاء الفئات (دليل البرمجة لـ #C) و تصميم فئة مجردة.

يجب على الفئة المجردة توفير تطبيق لكل أعضاء الواجهة.

قد تقوم الفئة المجردة المُطبّقة لواجهة معينة بربط أساليب الواجهة بأساليب مجردة. فعلى سبيل المثال:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

في هذا المثال، DerivedClass عبارة عن فئة مشتقة من الفئة المجردة BaseClass. تحتوي الفئة المجردة على أسلوب مجرد AbstractMethod وخاصيتين مجردتين X و Y.

    abstract class BaseClass   // Abstract class
    {
        protected int _x = 100;
        protected int _y = 150;
        public abstract void AbstractMethod();   // Abstract method
        public abstract int X    { get; }
        public abstract int Y    { get; }
    }

    class DerivedClass : BaseClass
    {
        public override void AbstractMethod()
        {
            _x++;
            _y++;
        }

        public override int X   // overriding property
        {
            get
            {
                return _x + 10;
            }
        }

        public override int Y   // overriding property
        {
            get
            {
                return _y + 10;
            }
        }

        static void Main()
        {
            DerivedClass o = new DerivedClass();
            o.AbstractMethod();
            Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        }
    }
    // Output: x = 111, y = 161

في المثال السابق، إذا حاولت إنشاء مثيل من الفئة المجردة باستخدام عبارة كما يلي:

BaseClass bc = new BaseClass();   // Error

ستتلقى خطأ يقول أن المحول البرمجي لا يمكنه إنشاء مثيل للفئة المجردة 'BaseClass'.

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

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

راجع أيضًا:

المرجع

المعدّلات (مرجع #C)

الظاهري ( مرجع C# )

override (مرجع #C)

الكلمات الأساسية لـ #C

المبادئ

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

موارد أخرى

مرجع C#‎