Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ключевое 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#.