private protected (C# リファレンス)
キーワード組み合わせ private protected
はメンバー アクセス修飾子です。 private protected メンバーには、包含クラスから派生した型からアクセスできますが、その包含アセンブリ内に限られます。 private protected
と他のアクセス修飾子の比較については、「アクセシビリティ レベル」を参照してください。
注意
private protected
アクセス修飾子は、C# バージョン 7.2 以降で有効です。
例
基底クラスの private protected メンバーには、変数の静的な型が派生クラス型の場合にのみ、その包含アセンブリで派生型からアクセスできます。 たとえば、次のコード セグメントを考えてみます。
public class BaseClass
{
private protected int myValue = 0;
}
public class DerivedClass1 : BaseClass
{
void Access()
{
var baseObject = new BaseClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 5;
// OK, accessed through the current derived class instance
myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
void Access()
{
// Error CS0122, because myValue can only be
// accessed by types in Assembly1
// myValue = 10;
}
}
この例には、2 つのファイル (Assembly1.cs
と Assembly2.cs
) が含まれています。
最初のファイルには public 基底クラスである BaseClass
とそれから派生した型である DerivedClass1
が含まれています。 BaseClass
は private protected メンバー myValue
を持っています。DerivedClass1
はこれに 2 通りのアクセスを試行します。 最初に BaseClass
のインスタンス経由で myValue
にアクセスしようとするとエラーが出ます。 ただし、DerivedClass1
で継承されたメンバーとして使用してみると成功します。
2 番目のファイルでは、DerivedClass2
の継承されたメンバーとして myValue
にアクセスしようとしてエラーを出します。これには Assembly1 の派生型のみがアクセスできるためです。
Assembly1.cs
に Assembly2
という名前の InternalsVisibleToAttribute が含まれている場合、派生クラス DerivedClass2
は、BaseClass
で宣言された private protected
メンバーにアクセスできます。 InternalsVisibleTo
を使用すると、private protected
メンバーを他のアセンブリの派生クラスから参照できるようになります。
構造体は継承できないため、構造体メンバーは private protected
になりません。
C# 言語仕様
詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。
関連項目
.NET