internal (odwołanie w C#)
Słowo internal
kluczowe jest modyfikatorem dostępu dla typów i elementów członkowskich typów.
Ta strona obejmuje
internal
dostęp. Słowointernal
kluczowe jest również częściąprotected internal
modyfikatora dostępu.
Typy wewnętrzne lub elementy członkowskie są dostępne tylko w plikach w tym samym zestawie, co w tym przykładzie:
public class BaseClass
{
// Only accessible within the same assembly.
internal static int x = 0;
}
Aby uzyskać porównanie internal
z innymi modyfikatorami dostępu, zobacz Poziomy ułatwień dostępu i modyfikatory dostępu.
Aby uzyskać więcej informacji na temat zestawów, zobacz Zestawy na platformie .NET.
Typowym zastosowaniem dostępu wewnętrznego jest programowanie oparte na składnikach, ponieważ umożliwia grupie składników współpracę w sposób prywatny bez uwidocznienia pozostałej części kodu aplikacji. Na przykład struktura służąca do tworzenia graficznych interfejsów użytkownika może zapewniać Control
klasy Form
, które współpracują przy użyciu elementów członkowskich z dostępem wewnętrznym. Ponieważ te elementy członkowskie są wewnętrzne, nie są one narażone na kod korzystający z platformy.
Jest to błąd podczas odwołowania się do typu lub elementu członkowskiego z dostępem wewnętrznym poza zestawem, w którym został zdefiniowany.
Przykład 1
Ten przykład zawiera dwa pliki Assembly1.cs
i Assembly1_a.cs
. Pierwszy plik zawiera wewnętrzną klasę bazową . BaseClass
W drugim pliku próba utworzenia wystąpienia BaseClass
spowoduje wystąpienie błędu.
// 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
}
}
Przykład 2
W tym przykładzie użyj tych samych plików, które użyto w przykładzie 1, i zmień poziom ułatwień dostępu na BaseClass
public
. Zmień również poziom ułatwień dostępu elementu członkowskiego intM
na internal
. W takim przypadku można utworzyć wystąpienie klasy, ale nie można uzyskać dostępu do wewnętrznego elementu członkowskiego.
// 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
}
}
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Zadeklarowane ułatwienia dostępu w specyfikacji języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.