Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A private protected combinação de palavras-chave é um modificador de acesso de membro. Os tipos que derivam da classe e são declarados no assembly que contém podem acessar um membro protegido privado. Para obter uma comparação com os outros modificadores de private protected acesso, consulte Níveis de Acessibilidade.
A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.
A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.
Dica
Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.
Tipos derivados podem acessar um membro protegido privado de uma classe base em seu assembly independente somente se o tipo estático da variável for o tipo de classe derivada. Por exemplo, considere o seguinte segmento de código:
// Assembly1.cs
// Compile with: /target:library
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 BaseClassbase pública e um tipo derivado dele. DerivedClass1
BaseClass possui um membro protegido privado, myValue que DerivedClass1 pode acessar como um membro herdado no mesmo assembly.
No segundo arquivo, uma tentativa de acesso myValue como membro DerivedClass2 herdado produz um erro, pois private protected os membros só podem ser acessados por tipos derivados no mesmo assembly. Essa restrição é a principal diferença ( protected que permite o acesso de classes derivadas em qualquer assembly) e protected internal (que permite o acesso de qualquer classe dentro do mesmo assembly ou classes derivadas em qualquer assembly).
Se Assembly1.cs contiver um InternalsVisibleToAttribute nome Assembly2, a classe DerivedClass2 derivada terá acesso aos private protected membros declarados em BaseClass.
InternalsVisibleTo torna os membros private protected visíveis para classes derivadas em outros assemblies.
Comparação com outros modificadores de acesso protegido
A tabela a seguir resume as principais diferenças entre os três modificadores de acesso protegidos:
| Modificador de Acesso | Mesma assembly, Classe derivada | Mesmo assemblagem, classe não derivada | Montagem diferente, classe derivada |
|---|---|---|---|
protected |
✔️ | ❌ | ✔️ |
protected internal |
✔️ | ✔️ | ✔️ |
private protected |
✔️ | ❌ | ❌ |
- Use
protectedquando desejar classes derivadas em qualquer assembly para acessar o membro. - Use
protected internalquando desejar o acesso mais permissivo (qualquer classe no mesmo assembly ou classes derivadas em qualquer lugar). - Use
private protectedquando desejar o acesso protegido mais restritivo (somente classes derivadas no mesmo assembly).
Você não pode declarar private protected membros struct porque structs não podem ser herdados.
Especificação da linguagem C#
Para obter mais informações, consulte a Especificação da Linguagem C# . A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#.