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
この例には、 Assembly1.cs と Assembly1_a.csの 2 つのファイルが含まれています。 最初のファイルには、 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