Ограничения на использование уровней доступности (справочник по C#)
При задании типа в объявлении необходимо проверить, зависит ли уровень доступности типа от уровня доступности элемента или другого типа.Например, прямой базовый класс должен иметь по крайней мере такой же уровень доступности, как и производный класс.Следующие объявления вызывают ошибку компиляции, так как базовый класс BaseClass менее доступен, чем MyClass:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
В следующей таблице приведены все ограничения на объявленные уровни доступности.
Контекст |
Заметки |
---|---|
Прямой базовый класс для типа класса должен иметь по крайней мере такой же уровень доступности, как и сам тип класса. |
|
Явные базовые интерфейсы для типа интерфейса должны иметь по крайней мере такой же уровень доступности, как и сам тип интерфейса. |
|
Тип возвращаемого значения и типы параметров для типа делегата должны иметь по крайней мере такой же уровень доступности, как и сам тип делегата. |
|
Тип константы должен иметь по крайней мере такой же уровень доступности, как и сама константа. |
|
Тип поля должен иметь по крайней мере такой же уровень доступности, как и само поле. |
|
Тип возвращаемого значения и типы параметров для метода должны иметь по крайней мере такой же уровень доступности, как и сам метод. |
|
Тип свойства должен иметь по крайней мере такой же уровень доступности, как и само свойство. |
|
Тип события должен иметь по крайней мере такой же уровень доступности, как и само событие. |
|
Тип и типы параметров для индексатора должны иметь по крайней мере такой же уровень доступности, как и сам индексатор. |
|
Тип возвращаемого значения и типы параметров для оператора должны иметь по крайней мере такой же уровень доступности, как и сам оператор. |
|
Типы параметров для конструктора должны иметь по крайней мере такой же уровень доступности, как и сам конструктор. |
Пример
В следующем примере содержатся ошибочные объявления различных типов.Комментарий после каждого объявления указывает на предполагаемую ошибку компиляции.
// 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#)
Область доступности (Справочник по C#)
Уровни доступности (Справочник по C#)
Модификаторы доступа (Руководство по программированию в C#)
Основные понятия
Руководство по программированию на C#