Поделиться через


Ограничения на использование уровней доступности (справочник по C#)

При задании типа в объявлении необходимо проверить, зависит ли уровень доступности типа от уровня доступности элемента или другого типа. Например, прямой базовый класс должен иметь по крайней мере такой же уровень доступности, как и производный класс. Следующие объявления вызывают ошибку компиляции, так как базовый класс BaseClass менее доступен, чем MyClass:

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

В следующей таблице приведены все ограничения на объявленные уровни доступности.

Контекст

Примечания

Классы

Прямой базовый класс для типа класса должен иметь по крайней мере такой же уровень доступности, как и сам тип класса.

интерфейсов,

Явные базовые интерфейсы для типа интерфейса должны иметь по крайней мере такой же уровень доступности, как и сам тип интерфейса.

Делегаты

Тип возвращаемого значения и типы параметров для типа делегата должны иметь по крайней мере такой же уровень доступности, как и сам тип делегата.

Константы

Тип константы должен иметь по крайней мере такой же уровень доступности, как и сама константа.

Поля

Тип поля должен иметь по крайней мере такой же уровень доступности, как и само поле.

Методы

Тип возвращаемого значения и типы параметров для метода должны иметь по крайней мере такой же уровень доступности, как и сам метод.

Свойства

Тип свойства должен иметь по крайней мере такой же уровень доступности, как и само свойство.

События

Тип события должен иметь по крайней мере такой же уровень доступности, как и само событие.

Indexers

Тип и типы параметров для индексатора должны иметь по крайней мере такой же уровень доступности, как и сам индексатор.

Операторы

Тип возвращаемого значения и типы параметров для оператора должны иметь по крайней мере такой же уровень доступности, как и сам оператор.

Конструкторы

Типы параметров для конструктора должны иметь по крайней мере такой же уровень доступности, как и сам конструктор.

Пример

В следующем примере содержатся ошибочные объявления различных типов. Комментарий после каждого объявления указывает на предполагаемую ошибку компиляции.

// 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#)

public (справочник по C#)

private (Справочник по C#)

protected (справочник по C#)

internal (Справочник по C#)

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#