internal (Справочник по C#)
Обновлен: Ноябрь 2007
Ключевое слово internal является модификатором доступа для типов и членов типов. Внутренние типы или члены доступны только внутри файлов в одной и той же сборке (см. следующий пример).
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}
Сравнение модификатора internal с другими модификаторами доступа см. в разделах Уровни доступности (Справочник по C#) и Модификаторы доступа (Руководство по программированию в C#).
Дополнительные сведения о сборках см. в разделе Сборки и глобальный кэш сборок (Руководство по программированию на C#).
Внутренний доступ чаще всего используется в разработке на основе компонентов, так как он позволяет группе компонентов взаимодействовать в закрытой форме, не открывая доступ остальной части кода приложения. Например, структура для построения графических пользовательских интерфейсов может предоставлять классы Control и Form, взаимодействующие при помощи членов с внутренним доступом. Так как эти члены являются закрытыми, они не предоставляются коду, использующему структуру.
Создание ссылки на тип или член с внутренним доступом за пределами сборки, в которой он был определен, приведет к ошибке.
Примечание. |
---|
Метод internalvirtual можно переопределить в некоторых языках, таких как MSIL, при помощи средства Ilasm.exe, даже если его не удается переопределить в языке C#. |
Пример
В этом примере содержится два файла: Assembly1.cs и Assembly2.cs. Первый файл содержит внутренний базовый класс BaseClass. Попытка создания экземпляра BaseClass во втором файле приведет к ошибке.
// Assembly1.cs
// Compile with: /target:library
internal class BaseClass
{
public static int intM = 0;
}
// Assembly1_a.cs
// Compile with: /reference:Assembly1.dll
class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
В этом примере используются те же файлы, что и в примере 1, но уровень доступности BaseClass изменен на public. Кроме того, уровень доступности члена IntM изменен на internal. В этом случае можно создать экземпляр класса, но доступ к внутреннему члену отсутствует.
// Assembly2.cs
// Compile with: /target:library
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
// Compile with: /reference:Assembly1.dll
public class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
3.5.1 Объявленная доступность
3.5.4 Ограничения доступности
10.3.5 Модификаторы доступа
10.3.8.2 Объявленная доступность
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Модификаторы доступа (Справочник по C#)
Уровни доступности (Справочник по C#)
Модификаторы (Справочник по C#)