internal (Справочник по C#)
Ключевое слово internal
является модификатором доступа для типов и членов типов.
Эта страница содержит доступ
internal
. Ключевое словоinternal
также является частью модификатора доступаprotected internal
.
Внутренние типы или члены доступны только в файлах в той же сборке, как в этом примере:
public class BaseClass
{
// Only accessible within the same assembly.
internal static int x = 0;
}
Сравнение модификатора internal
с другими модификаторами доступа см. в разделах Уровни доступности и Модификаторы доступа.
Это assembly
исполняемая или динамическая библиотека ссылок (DLL), созданная из компиляции одного или нескольких исходных файлов.
См. дополнительные сведения о сборках в .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#.