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, myValue
que 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 , Assembly2
a 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#.