internal (C# リファレンス)
更新 : 2007 年 11 月
internal キーワードは、型および型メンバのためのアクセス修飾子です。internal 型またはメンバは、この例に示すように同じアセンブリのファイル内でのみアクセスできます。
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}
internal と他のアクセス修飾子の比較については、「アクセシビリティ レベル (C# リファレンス)」および「アクセス修飾子 (C# プログラミング ガイド)」を参照してください。
アセンブリの詳細については、「アセンブリとグローバル アセンブリ キャッシュ (C# プログラミング ガイド)」を参照してください。
内部アクセスは、コンポーネントのグループがアプリケーション コードの残りの部分には公開されないプライベートな手法で協調動作できるので、一般的にはコンポーネント ベースの開発に使用されます。たとえば、グラフィカル ユーザー インターフェイスを構築するためのフレームワークでは、内部アクセスでメンバを使用して協調動作する Control クラスと Form クラスを提供できます。これらのメンバは内部メンバなので、フレームワークを使用するコードに対しては公開されません。
内部アクセスのメンバまたは型を、メンバまたは型が定義されているアセンブリの外側で参照するとエラーになります。
メモ : |
---|
internalvirtual メソッドは、C# ではオーバーライドできませんが、言語によってはオーバーライドできる場合もあります。たとえば、Microsoft Intermediate Language (MSIL) でオーバーライドされる場合があります。 |
使用例
この例には、Assembly1.cs および Assembly2.cs という 2 つのファイルがあります。1 つ目のファイルには、内部基本クラス 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()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
この例では、例 1 で使用したのと同じファイルを使用します。ただし、BaseClass のアクセシビリティ レベルを public に変更します。また、IntM メンバのアクセシビリティ レベルを internal に変更します。この場合、クラスをインスタンス化できますが、internal メンバにはアクセスできません。
// Assembly2.cs
// Compile with: /target:library
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
// Compile with: /reference:Assembly1.dll
public class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
3.5.1 宣言されたアクセシビリティ
3.5.4 アクセシビリティの制約
10.3.5 アクセス修飾子
10.3.8.2 宣言されたアクセシビリティ