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


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

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

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

Доступ к типам или членам с модификатором доступа protected internal может осуществляться из текущей сборки или из типов, которые являются производными от содержащего их класса.

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

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

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

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

Примечание

Метод internal virtual можно переопределить в некоторых языках, таких как MSIL, при помощи средства Ilasm.exe, даже если его не удается переопределить в языке C#.

Пример

В этом примере содержится два файла: Assembly1.cs и Assembly1_a.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#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

Ссылки

Ключевые слова C#

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

Уровни доступности (Справочник по C#)

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

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

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

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

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

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

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

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