private protected (Referência C#)

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

Nota

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

Exemplo

Um membro privado protegido de uma classe base só é acessível a partir de tipos derivados em seu assembly de contenção se o tipo estático da variável for o tipo de 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 possui um membro privado protegido, myValueque DerivedClass1 tenta acessar de duas maneiras. A primeira tentativa de acesso myValue através de uma instância de BaseClass produzirá um erro. No entanto, a tentativa de usá-lo como um membro herdado em DerivedClass1 será bem-sucedida.

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

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

Os membros do 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 do C#.

Consulte também