سؤال

لدي سؤال يعتمد على هذه سؤال

في القسمhttp://www.parashift.com/c٪2B٪2B-FAQ-LITE/PRIVEN-INHERITANCE.HTML#FAQ-24.3ما يلي ذكر:

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

ومع ذلك ، أود أن أعرف لماذا استخدام الميراث العام لن يحقق نفس التأثير. أي الجزء التالي من رمز C# يفعل نفس الشيء ..

class Wilma
{
    protected void FredCallsWilma() {
        Console.Write("Fred Calls Wilma ;");
        WilmaCallsFred();
    }

    protected virtual void WilmaCallsFred() {}
}

class Fred : Wilma
{
    public void barney(){
        Console.Write("barney;");
        FredCallsWilma();
    }

    protected override void WilmaCallsFred(){
        Console.Write("Wilma Calls Fred ;");
    }
}

class Program
{
    static void Main(string[] args){
        Fred f1 = new Fred();
        f1.barney();
    }
}

يطبع

بارني فريد يدعو ويلما. ويلما تدعو فريد

إذن ما هو خاص حول الميراث الخاص كما هو مقتبس في C ++ الأسئلة الشائعة. ألا يحل محل الميراث العام للعمل الميراث الخاص على ما يرام لتحقيق هذه النتيجة؟

هل كانت مفيدة؟

المحلول

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

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

الميراث العام هو تقنية تصميم. تهدف إلى السماح للرمز الذي تكتبه باستخدام التعليمات البرمجية الأخرى التي تعرف بالفعل كيفية العمل مع الواجهة المقدمة من الفئة الأساسية.

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

نصائح أخرى

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top