private protected (referência do C#)

A combinação de palavras-chave private protected é um modificador de acesso de membro. Um membro particular protegido é acessível por tipos derivados da classe recipiente, mas apenas dentro de seu assembly recipiente. Para obter uma comparação de private protected com os outros modificadores de acesso, consulte Níveis de acessibilidade.

Observação

O modificador de acesso private protected é válido no C# versão 7.2 e posterior.

Exemplo

Um membro particular protegido de uma classe base é acessível de tipos derivados em seu assembly recipiente apenas se o tipo estático da variável é o tipo da classe derivada. Por exemplo, considere o seguinte segmento de código:

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;
    }
}

Este exemplo contém dois arquivos, Assembly1.cs e Assembly2.cs. O primeiro arquivo contém uma classe base pública, BaseClass, e um tipo derivado dela, DerivedClass1. BaseClass tem um membro particular protegido, myValue, que DerivedClass1 tenta acessar de duas maneiras. A primeira tentativa de acessar myValue por meio de uma instância de BaseClass produzirá um erro. No entanto, a tentativa de usá-lo como um membro herdado em DerivedClass1 terá êxito.

No segundo arquivo, uma tentativa de acessar myValue como um membro herdado de DerivedClass2 produzirá um erro, pois ele é acessível apenas por tipos derivados em Assembly1.

Se Assembly1.cs contiver um InternalsVisibleToAttribute quye nomeia Assembly2, a classe derivada DerivedClass2 terá acesso aos private protected membros declarados em BaseClass. InternalsVisibleTo torna os membros private protected visíveis para classes derivadas em outros assemblies.

Membros de struct não podem ser private protected porque o struct não pode ser herdado.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Confira também