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 protected internal combinação de palavras-chave é um modificador de acesso de membro. Você pode acessar um membro interno protegido do assembly atual ou de tipos derivados da classe que contém. Para obter uma comparação com os outros modificadores de protected internal 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#.
Qualquer tipo dentro do assembly que contém pode acessar um membro interno protegido de uma classe base. Uma classe derivada localizada em outro assembly só poderá acessar o membro se o acesso ocorrer por meio de uma variável do tipo de classe derivada. Por exemplo, considere o seguinte segmento de código:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
Este exemplo contém dois arquivos Assembly1.cs e Assembly2.cs.
O primeiro arquivo contém uma classe BaseClassbase pública e outra classe. TestAccess
BaseClass possui um membro interno protegido, myValueque o TestAccess tipo acessa porque está no mesmo assembly.
No segundo arquivo, uma tentativa de acesso myValue por meio de uma instância produz BaseClass um erro, enquanto um acesso a esse membro por meio de uma instância de uma classe derivada é DerivedClass bem-sucedido. Essa regra de acesso mostra que protected internal permite o acesso de qualquer classe dentro do mesmo assembly ou classes derivadas em qualquer assembly, tornando-a a mais permissiva dos modificadores de acesso protegidos.
Os membros do Struct não podem ser protected internal porque o struct não pode ser herdado.
Substituindo membros internos protegidos
Quando você substitui um membro virtual, o modificador de acessibilidade do método substituído depende do assembly em que você define a classe derivada.
Quando você define a classe derivada no mesmo assembly que a classe base, todos os membros substituídos têm protected internal acesso. Se você definir a classe derivada em um assembly diferente da classe base, os membros substituídos terão protected acesso.
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
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#.