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.cs
と Assembly1_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# の構文と使用法に関する信頼性のある情報源です。
関連項目
.NET