سؤال

إذا كان لدي فصل مع طريقة أريدها protected و internal. أريد أن تكون الفصول المشتقة فقط في التجميع قادرة على تسميتها.

حيث protected internal يعني protected أو internal, ، لديك لاتخاذ خيار. ماذا تختار في هذه الحالة - protected أو internal?

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

المحلول

أريد أن تكون الفصول المشتقة فقط في التجميع قادرة على تسميتها.

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

أظن أن هذا الأخير هو شيء أرخص وأسهل. سأجعلها داخلية.

نصائح أخرى

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

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

تعديل

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

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

إنه قرار غريب protected internal يعني protected أو internal. لهذه الحالة الدقيقة التي سأستخدمها internal. والسبب هو أنه إذا تم كسر التغليف ، فأنا أفضل أن أكون أنا ، بل أن شخصًا لا يخضع لسيطرتي.

أعتقد أن الإجابة تختلف بناءً على احتياجاتك. لو كنت أنت ، سأفعل شيئًا كهذا:

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top