Область доступности (Справочник по C#)
Обновлен: Ноябрь 2007
Область доступности члена определяет, в каких разделах программы может присутствовать ссылка на этот член. Если член является вложенным членом другого типа, его область доступности определяется как уровнем доступности самого члена, так и доменом доступности типа, непосредственно содержащего вложенный тип.
Домен доступности типа верхнего уровня — это, по крайней мере, текст программы проекта, в котором он объявлен. Таким образом, домен включает все исходные файлы данного проекта. Домен доступности вложенного типа — это, по крайней мере, текст программы типа, в котором он объявлен. Таким образом, доменом является тело типа, включающее все вложенные типы. Домен доступности вложенного типа никогда не выходит за границы домена доступности содержащего его типа. Эти принципы продемонстрированы в следующем примере.
Пример
Этот пример содержит тип верхнего уровня T1 и два вложенных класса: M1 и M2. Классы содержат поля, имеющие различную объявленную доступность. В методе Main после каждого оператора следует комментарий, указывающий домен доступности для каждого члена. Обратите внимание, что операторы, ссылающиеся на недоступные члены, закомментированы. Если необходимо просмотреть сообщения об ошибках, выдаваемые компилятором при попытке ссылки на недоступный член, удаляйте комментарии по одному.
namespace AccessibilityDomainNamespace
{
public class T1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0; // CS0414
public class M1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0; // CS0414
}
private class M2
{
public static int publicInt = 0;
internal static int internalInt = 0;
private static int privateInt = 0; // CS0414
}
}
class MainClass
{
static void Main()
{
// Access is unlimited:
T1.publicInt = 1;
// Accessible only in current assembly:
T1.internalInt = 2;
// Error: inaccessible outside T1:
// T1.myPrivateInt = 3;
// Access is unlimited:
T1.M1.publicInt = 1;
// Accessible only in current assembly:
T1.M1.internalInt = 2;
// Error: inaccessible outside M1:
// T1.M1.myPrivateInt = 3;
// Error: inaccessible outside T1:
// T1.M2.myPublicInt = 1;
// Error: inaccessible outside T1:
// T1.M2.myInternalInt = 2;
// Error: inaccessible outside M2:
// T1.M2.myPrivateInt = 3;
}
}
}
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
3.5.1 Объявленная доступность
3.5.2 Домены доступности
3.5.4 Ограничения доступности
10.3.5 Модификаторы доступа
10.3.8.2 Объявленная доступность
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Модификаторы доступа (Справочник по C#)
Уровни доступности (Справочник по C#)
Ограничения на использование уровней доступности (справочник по C#)
Модификаторы доступа (Руководство по программированию в C#)