سؤال

مرحبا لدي الدرجة "A" مع المجرد طريقة

protected abstract List<Contributor> GetContributors(List<SyndicationPerson> contributersList);

أريد أن تجاوز هذا الأسلوب في اشتقاق فئة "ب" مع الشروط التالية

  • يجب أن تكون خاصة إلى الفئة ب.

المترجم لا تسمح لي أن يعلن هذا الأسلوب خاصة في اشتقاق فئة "ب" ما هو بناء الجملة الصحيح ?

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

المحلول

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

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

لماذا تريد أن تجعل أسلوب خاص في المقام الأول ، عندما صمم أن يكون للاستدعاء من ؟

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

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

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

نصائح أخرى

عموما عفوا سيادة, لا يمكن للمرء أن يقلل من الرؤية من الأعضاء عندما تجاوز.لذا من محمية خاصة لا يسمح.

لا يمكنك تغيير مستوى الوصول من طرق افتراضية في C#.يمكنك redeclare ذلك باستخدام new الكلمة ولكن هذا هو redeclaration أن يخفي الطريقة السابقة, لذلك سوف لا تعمل كما تتوقع إذا كنت تتعامل مع الأجسام التي تختلف في المعلنة والفعلية نوع ، أو إذا كنت روتيني يلقي كائنات قاعدة الطبقة.

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