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

Ключевое слово internal является модификатором доступа для типов и членов типов.

Эта страница содержит доступ internal. Ключевое слово internal также является частью модификатора доступа protected internal.

Внутренние типы или члены доступны только внутри файлов в той же сборке, как в следующем примере:

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

Сравнение модификатора internal с другими модификаторами доступа см. в разделах Уровни доступности и Модификаторы доступа.

См. дополнительные сведения о сборках в .NET.

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

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

Пример 1

Этот пример содержит два файла, 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()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

Пример 2

В этом примере используйте те же файлы, которые использовались в примере 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:Assembly2.dll  
public class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

Спецификация языка C#

Дополнительные сведения см. в разделе Объявленная доступность в Спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также