internal (C# リファレンス)

internal キーワードは、型と型のメンバーを示すアクセス修飾子です。

このページでは、internal アクセスについて説明します。 internal キーワードも protected internal アクセス修飾子に含まれます。

内部型またはメンバーは、この例のように、同じアセンブリにあるファイル内でのみアクセスできます。

public class BaseClass
{  
    // Only accessible within the same assembly.
    internal static int x = 0;
}  

internal とその他のアクセス修飾子の比較については、「アクセシビリティ レベル」と「アクセス修飾子」を参照してください。

assembly は、1 つ以上のソース ファイルのコンパイルにより生成される、実行可能ファイルまたはダイナミック リンク ライブラリ (DLL) です。

アセンブリについて詳しくは、「.NET のアセンブリ」をご覧ください。

一般的に、内部アクセスはコンポーネント ベースの開発で使用されます。これは、コンポーネントのグループを、アプリケーション コードの他の部分に公開することなくプライベートに連携させることができるためです。 たとえば、グラフィカル ユーザー インターフェイスを構築するためのフレームワークでは、内部アクセスによってメンバーを使用することで連携する Control クラスと Form クラスを提供できます。 これらは内部のメンバーなので、フレームワークを使用しているコードには公開されません。

型またはメンバーが定義されているアセンブリの外側で、型またはメンバーを内部アクセスで参照するとエラーになります。

例 1

この例には、2 つのファイル (Assembly1.csAssembly1_a.cs) が含まれています。 最初のファイルには、内部の基底クラス BaseClass が含まれています。 2 番目のファイルでは、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# の構文と使用法に関する信頼性のある情報源です。

関連項目