intern (C#-referens)
Nyckelordet internal
är en åtkomstmodifierare för typer och typmedlemmar.
Den här sidan beskriver
internal
åtkomst. Nyckelordetinternal
är också en del avprotected internal
åtkomstmodifieraren.
Interna typer eller medlemmar är endast tillgängliga i filer i samma sammansättning, som i det här exemplet:
public class BaseClass
{
// Only accessible within the same assembly.
internal static int x = 0;
}
En jämförelse av internal
med andra åtkomstmodifierare finns i Hjälpmedelsnivåer och Åtkomstmodifierare.
En assembly
är ett körbart eller dynamiskt länkbibliotek (DLL) som skapas från kompileringen av en eller flera källfiler.
Mer information om sammansättningar finns i Sammansättningar i .NET.
En vanlig användning av intern åtkomst är i komponentbaserad utveckling eftersom den gör det möjligt för en grupp komponenter att samarbeta privat utan att exponeras för resten av programkoden. Ett ramverk för att skapa grafiska användargränssnitt kan till exempel ge Control
och Form
klasser som samarbetar med medlemmar med intern åtkomst. Eftersom dessa medlemmar är interna exponeras de inte för kod som använder ramverket.
Det är ett fel att referera till en typ eller en medlem med intern åtkomst utanför sammansättningen där den definierades.
Exempel 1
Det här exemplet innehåller två filer Assembly1.cs
och Assembly1_a.cs
. Den första filen innehåller en intern basklass, BaseClass
. I den andra filen skapar ett försök att instansiera BaseClass
ett fel.
// 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
}
}
Exempel 2
I det här exemplet använder du samma filer som du använde i exempel 1 och ändrar tillgänglighetsnivån BaseClass
till public
. Ändra även tillgänglighetsnivån för medlemmen intM
till internal
. I det här fallet kan du instansiera klassen, men du kan inte komma åt den interna medlemmen.
// 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
}
}
Språkspecifikation för C#
Mer information finns i Deklarerad tillgänglighet i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.