قيود استخدام معدلات الوصول (مرجع #C)
عندما تقوم بتعريف نوع تأكد من رؤية ما إذا كان هذا النوع قابل للوصول كعضو أو نوع آخر. على سبيل المثال، يجب أن تكون فئة الأساس المباشرة قابلة للوصول على الأقل كالفئة المشتقة. ستؤدي التعريفات التالية خطأ في المحول البرمجي لأن قبولية الوصول للفئة الأساسية BaseClass أقل من MyClass:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
يلخص الجدول التالي قيود استخدام معدلات الوصول المُعلَنة.
Context |
ملاحظات |
---|---|
يجب على فئة الأساس المباشرة من نوع فئة معينة أن تكون على الأقل بمعدل وصول نوع الفئة نفسها. |
|
يجب على الواجهات الأساسية الصريحة من نوع واجهة معينة أن تكون على الأقل بمعدل وصول نوع الواجهة نفسها. |
|
يجب على نوع الإرجاع وأنواع المعلمات في نوع تفويض معين أن يكون على الأقل بمعدل وصول نوع التفويض نفسه. |
|
يجب أن يكون نوع الثابت على الأقل بمعدل وصول الثابت نفسه. |
|
يجب أن يكون نوع الحقل على الأقل بمعدل وصول الحقل نفسه. |
|
يجب أن يكون نوع الإرجاع وأنواع المعلمات للأسلوب على الأقل بمعدل وصول الأسلوب نفسه. |
|
يجب أن يكون نوع الخاصية على الأقل بمعدل وصول الخاصية نفسها. |
|
يجب أن يكون نوع الحدث على الأقل بمعدل وصول الحدث نفسه. |
|
يجب أن يكون نوع وأنواع معلمات مفهرس معين على الأقل بمعدل وصول المفهرس نفسه. |
|
يجب أن يكون نوع إرجاع وأنواع معلمات عامل تشغيل معين على الأقل بمعدل وصول العامل نفسه. |
|
يجب أن تكون أنواع المعلمات لدالة الإنشاء على الأقل بمعدل وصول دالة الإنشاء نفسها. |
مثال
يحتوي المثال التالي على تعريفات خاطئة لأنواع مختلفة. التعليق الذي يتبع كل تعريف يشير إلى خطأ المحول البرمجي المتوقع.
// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.
using System;
// A delegate:
delegate int MyDelegate();
class B
{
// A private method:
static int MyPrivateMethod()
{
return 0;
}
}
public class A
{
// Error: The type B is less accessible than the field A.myField.
public B myField = new B();
// Error: The type B is less accessible
// than the constant A.myConst.
public readonly B myConst = new B();
public B MyMethod()
{
// Error: The type B is less accessible
// than the method A.MyMethod.
return new B();
}
// Error: The type B is less accessible than the property A.MyProp
public B MyProp
{
set
{
}
}
MyDelegate d = new MyDelegate(B.MyPrivateMethod);
// Even when B is declared public, you still get the error:
// "The parameter B.MyPrivateMethod is not accessible due to
// protection level."
public static B operator +(A m1, B m2)
{
// Error: The type B is less accessible
// than the operator A.operator +(A,B)
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}
مواصفات لغة #C
لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.
راجع أيضًا:
المرجع
معدلات الاتصال ( ارشادات البرمجة C# )