intern (C#-referens)

Nyckelordet internal är en åtkomstmodifierare för typer och typmedlemmar.

Den här sidan beskriver internal åtkomst. Nyckelordet internal är också en del av protected 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.

Se även