الوصول إلى الأعضاء غير العامين


كيف يمكننا الوصول إلى الأعضاء غير العامين؟

لدي كائن يسمى جرعة اقتراحات والذي يحتوي على عضو غير عام يسمى “الترددات”

أريد الوصول إلى نفسه.

الرجاء مساعدتي في هذا

الحل 1

في الأساس، لدينا 4 معدّلات وصول في لغة C#. العامة والمحمية والداخلية والخاصة. فيما يلي تعريفات كل معدّل:

1. ال عام [^] الكلمة الأساسية هي معدّل وصول للأنواع وأعضاء النوع. الوصول العام هو مستوى الوصول الأكثر تساهلاً. لا توجد قيود على الوصول إلى الأعضاء العامين.

2. ال محمي[^] الكلمة الأساسية هي معدّل وصول الأعضاء. يمكن الوصول إلى العضو المحمي من داخل الفئة التي تم الإعلان عنه، ومن داخل أي فئة مشتقة من الفئة التي أعلنت هذا العضو.

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

4. ال خاص[^] الكلمة الأساسية هي معدّل وصول الأعضاء. الوصول الخاص هو مستوى الوصول الأقل سماحًا. لا يمكن الوصول إلى الأعضاء الخاصين إلا داخل نص الفصل أو البنية التي تم الإعلان عنهم فيها

باختصار، اعتمادًا على المتغير غير العام، هناك مستويات مختلفة لإمكانية الوصول لأعضائك.

الحل 3

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

استخدم الطرق التالية System.Type: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.

يرى http://msdn.microsoft.com/en-us/library/system.type.aspx[^].

للعثور على أساليب غير عامة، تحتاج إلى استخدام إصدارات “Get...“طريقة استخدام System.Reflection.BindingFlags معامل؛ يستخدم System.Reflection.BindingFlags.NonPublic أو System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public

-سا

الحل 2

قم بإنشاء ملكية عامة ستتمكن من الوصول إليها.

الحل 39

الجواب البسيط هو أن الحاجة إلى الوصول إلى عضو خاص هي أ خطأ، عيب في التصميم.

إحدى الإستراتيجيات المستخدمة للسماح بمستويات مختلفة من الوصول إلى الأساليب/الحالة الداخلية للفصول الدراسية هي التعامل مع مشكلات الأمان على مستوى نظام التشغيل (المجموعات والأذونات والمستخدمين).

فكر في كيفية تسجيل الدخول عبر الإنترنت للحفاظ على حقوق المستخدم والمسؤول لتعديل التعليمات البرمجية؛ حول كيفية الوصول إلى قواعد البيانات الآمنة بمستويات مختلفة من إذن القراءة/الكتابة.

هناك إستراتيجية أخرى تتمثل في تمرير رمز أمان من نوع ما في مُنشئ الفئة: وهذا يمثل دائمًا خطرًا أمنيًا.

إذا لم تكتب الكود، فلا يمكنك تعديله، وما إلى ذلك، فأنت كذلك القرصنة الكود … مهمة غير مرغوب فيها للغاية.

コメント

タイトルとURLをコピーしました