Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ключевое 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#.