internal (C# リファレンス)internal (C# Reference)

internal キーワードは、型と型のメンバーを示すアクセス修飾子です。The internal keyword is an access modifier for types and type members.

このページでは、internal アクセスについて説明します。This page covers internal access. internal キーワードも protected internal アクセス修飾子に含まれます。The internal keyword is also part of the protected internal access modifier.

internal 型またはメンバーは、次の例のように、同じアセンブリ内のファイルでのみアクセスできます。Internal types or members are accessible only within files in the same assembly, as in this example:

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

internal とその他のアクセス修飾子の比較については、「アクセシビリティ レベル」と「アクセス修飾子」を参照してください。For a comparison of internal with the other access modifiers, see Accessibility Levels and Access Modifiers.

アセンブリについて詳しくは、「.NET のアセンブリ」をご覧ください。For more information about assemblies, see Assemblies in .NET.

一般的に、内部アクセスはコンポーネント ベースの開発で使用されます。これは、コンポーネントのグループを、アプリケーション コードの他の部分に公開することなくプライベートに連携させることができるためです。A common use of internal access is in component-based development because it enables a group of components to cooperate in a private manner without being exposed to the rest of the application code. たとえば、グラフィカル ユーザー インターフェイスを構築するためのフレームワークでは、内部アクセスによってメンバーを使用することで連携する Control クラスと Form クラスを提供できます。For example, a framework for building graphical user interfaces could provide Control and Form classes that cooperate by using members with internal access. これらは内部のメンバーなので、フレームワークを使用しているコードには公開されません。Since these members are internal, they are not exposed to code that is using the framework.

型またはメンバーが定義されているアセンブリの外側で、型またはメンバーを内部アクセスで参照するとエラーになります。It is an error to reference a type or a member with internal access outside the assembly within which it was defined.

Example

この例には、2 つのファイル (Assembly1.csAssembly1_a.cs) が含まれています。This example contains two files, Assembly1.cs and Assembly1_a.cs. 最初のファイルには、内部の基底クラス BaseClass が含まれています。The first file contains an internal base class, BaseClass. 2 番目のファイルでは、BaseClass のインスタンス化を試行するとエラーが発生します。In the second file, an attempt to instantiate BaseClass will produce an error.

// 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()   
   {  
      BaseClass myBase = new BaseClass();   // CS0122  
   }  
}  

Example

この例では、例 1 で使用したのと同じファイルを使用し、BaseClass のアクセシビリティ レベルを public に変更します。In this example, use the same files you used in example 1, and change the accessibility level of BaseClass to public. また、メンバー IntM のアクセシビリティ レベルを internal に変更します。Also change the accessibility level of the member IntM to internal. この場合、クラスのインスタンス化は可能ですが、内部メンバーへのアクセスはできません。In this case, you can instantiate the class, but you cannot access the internal member.

// 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()   
   {  
      BaseClass myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

C# 言語仕様C# Language Specification

詳細については、「C# 言語仕様」の宣言されたアクセシビリティに関するセクションを参照してください。For more information, see Declared accessibility in the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also