عندما كنت استخدام "الحماية الداخلية" الوصول إلى معدل?

StackOverflow https://stackoverflow.com/questions/205165

سؤال

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

لذا, هذا مع العلم:عندما كنت استخدامه ؟ هل يمكنك إعطاء مثال ؟ هل هناك جيدة ، إلقاء الضوء مثال للاستخدام في الداخل .صافي قاعدة الطبقة المكتبة ؟

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

المحلول

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

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

.NET Framework استخدام
AccessibilityNotifyClients على Control هو protected internal.باستخدام عاكس, يمكنني أن أرى أن هذا تم القيام به بحيث CheckedItemCollection من CheckListBox يمكن الوصول إليه عند تغيير التحقق من الدول.

نصائح أخرى

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

وقال أن هناك حجة لجعل كل شيء العام لاختبار وحدة.

أود أن أضيف مثالا من ASP.Net إطار MVC:

public abstract class Controller : ControllerBase, <Omitted Interfaces>
{
     protected internal ViewResult View() {
            return View(null /* viewName */, null /* masterName */, null /* model */);
        }

     protected internal ContentResult Content(string content) {
            return Content(content, null /* contentType */);
        }

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