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

protected キーワードはメンバー アクセス修飾子です。The protected keyword is a member access modifier.

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

protected メンバーは、そのクラス内部と、派生クラスのインスタンスからアクセスできます。A protected member is accessible within its class and by derived class instances.

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

Example

派生クラス内で基底クラスの protected メンバーにアクセスできるのは、派生クラスの型を通してアクセスした場合のみです。A protected member of a base class is accessible in a derived class only if the access occurs through the derived class type. たとえば、次のコード セグメントを考えてみます。For example, consider the following code segment:

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        // Error CS1540, because x can only be accessed by
        // classes derived from A.
        // a.x = 10; 

        // OK, because this class derives from A.
        b.x = 10;
    }
}

ステートメント a.x = 10 でエラーが発生します。これは、クラス B のインスタンスではなく、静的メソッド Main 内にあるためです。The statement a.x = 10 generates an error because it is made within the static method Main, and not an instance of class B.

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

Example

この例では、DerivedPoint クラスは Point から派生しています。In this example, the class DerivedPoint is derived from Point. そのため、基底クラスの protected メンバーに、派生クラスから直接アクセスできます。Therefore, you can access the protected members of the base class directly from the derived class.

class Point 
{
    protected int x; 
    protected int y;
}

class DerivedPoint: Point 
{
    static void Main() 
    {
        DerivedPoint dpoint = new DerivedPoint();

        // Direct access to protected members:
        dpoint.x = 10;
        dpoint.y = 15;
        Console.WriteLine("x = {0}, y = {1}", dpoint.x, dpoint.y); 
    }
}
// Output: x = 10, y = 15

xy のアクセス レベルを private に変更すると、コンパイラによってエラー メッセージが生成されます。If you change the access levels of x and y to private, the compiler will issue the error messages:

'Point.y' is inaccessible due to its protection level.

'Point.x' is inaccessible due to its protection level.

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