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

キーワード組み合わせ protected internal はメンバー アクセス修飾子です。The protected internal keyword combination is a member access modifier. protected internal メンバーには、現在のアセンブリから、または包含クラスから派生した型からアクセスできます。A protected internal member is accessible from the current assembly or from types that are derived from the containing class. protected internal と他のアクセス修飾子の比較については、「アクセシビリティ レベル」を参照してください。For a comparison of protected internal with the other access modifiers, see Accessibility Levels.

Example

基底クラスのプロテクト内部メンバーは、包含アセンブリ内の任意の型からアクセスします。A protected internal member of a base class is accessible from any type within its containing assembly. 派生クラス型の変数経由でアクセスする場合にのみ、別のアセンブリにある派生クラスでもアクセスできます。It is also accessible in a derived class located in another assembly only if the access occurs through a variable of the derived class type. たとえば、次のコード セグメントを考えてみます。For example, consider the following code segment:

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
   protected internal int myValue = 0;
}

class TestAccess
{
    void Access()
    {
        var baseObject = new BaseClass();
        baseObject.myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
    static void Main()
    {
        var baseObject = new BaseClass();
        var derivedObject = new DerivedClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 10;

        // OK, because this class derives from BaseClass.
        derivedObject.myValue = 10;
    }
}

この例には、2 つのファイル (Assembly1.csAssembly2.cs) が含まれています。This example contains two files, Assembly1.cs and Assembly2.cs. 最初のファイルには public 基底クラスである BaseClass ともう 1 つのクラスである TestAccess が含まれています。The first file contains a public base class, BaseClass, and another class, TestAccess. BaseClass は protected internal メンバーの myValue を持っています。これは TestAccess 型にアクセスされます。BaseClass owns a protected internal member, myValue, which is accessed by the TestAccess type. 2 番目のファイルでは、BaseClass のインスタンス経由で myValue にアクセスしようとするとエラーが発生します。一方で、派生クラス DerivedClass のインスタンスからこのメンバーにアクセスすると成功します。In the second file, an attempt to access myValue through an instance of BaseClass will produce an error, while an access to this member through an instance of a derived class, DerivedClass will succeed.

構造体は継承できないため、構造体メンバーは protected internal になりません。Struct members cannot be protected internal because the struct cannot be inherited.

C# 言語仕様C# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also