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#.