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

Обновлен: Ноябрь 2007

Ключевое слово internal является модификатором доступа для типов и членов типов. Внутренние типы или члены доступны только внутри файлов в одной и той же сборке (см. следующий пример).

public class BaseClass 
{
    // Only accessible within the same assembly
    internal static int x = 0;
}

Сравнение модификатора internal с другими модификаторами доступа см. в разделах Уровни доступности (Справочник по C#) и Модификаторы доступа (Руководство по программированию в C#).

Дополнительные сведения о сборках см. в разделе Сборки и глобальный кэш сборок (Руководство по программированию на C#).

Внутренний доступ чаще всего используется в разработке на основе компонентов, так как он позволяет группе компонентов взаимодействовать в закрытой форме, не открывая доступ остальной части кода приложения. Например, структура для построения графических пользовательских интерфейсов может предоставлять классы Control и Form, взаимодействующие при помощи членов с внутренним доступом. Так как эти члены являются закрытыми, они не предоставляются коду, использующему структуру.

Создание ссылки на тип или член с внутренним доступом за пределами сборки, в которой он был определен, приведет к ошибке.

7c5ka91b.alert_note(ru-ru,VS.90).gifПримечание.

Метод 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#)

Модификаторы (Справочник по C#)

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

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

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

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

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