كيف يمكنك إخفاء البيانات من جميع ولكن بمجرد الدرجة؟

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

سؤال

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

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

وهذا ليس دليل كامل تماما، لكنه يمنع بعض المطور الذي لم تكن مألوفة مع النظام من اعتقد انه على ما يرام لاستخدام هذه الأساليب التخزين العامة بسبب Visual Studio intellitype يجعلها مرئية عندما يتم الترميز. بدلا من ذلك، سيكون لديهم في محاولة لكسر من قبل الصب الكائن كنوع الذي يحتوي على طرق تخزين.

هل هناك طريقة أنظف للقيام بذلك؟

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

المحلول

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

نصائح أخرى

وأنا أتفق - جعل الداخلية مرئية للجمعية موثوق يبدو وكأنه أسهل طريقة لتحقيق ما تريد القيام به

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