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


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

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

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

Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.

Подсказка

Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.

Замечание

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

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

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

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

Это assembly исполняемая или динамическая библиотека ссылок (DLL), созданная из компиляции одного или нескольких исходных файлов.

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

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

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

Примеры

В этом примере содержатся два файла и Assembly1.csAssembly1_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
   }
}

В этом примере используйте те же файлы, которые использовались в первом примере, но измените уровень BaseClasspublicдоступности на . Также измените уровень специальных возможностей члена intMinternalна . В этом случае можно создать экземпляр класса, но получить доступ к внутреннему элементу невозможно.

// 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#.

См. также