Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A protected internal combinação de palavras-chave é um modificador de acesso de membro. Pode aceder a um membro interno protegido a partir do assembly atual ou de tipos derivados da classe que contém. Para obter uma comparação com os outros modificadores de acesso, consulte Níveis de protected internalacessibilidade.
A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.
A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.
Sugestão
Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.
Qualquer tipo dentro do conjunto contendo pode aceder a um membro interno protegido de uma classe base. Uma classe derivada localizada noutra assembly só pode aceder ao membro se o acesso ocorrer através 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 base pública, BaseClasse outra classe, TestAccess.
BaseClass possui um membro interno protegido, myValue, ao qual o TestAccess tipo acede porque estão na mesma assembleia.
No segundo ficheiro, uma tentativa de aceder myValue através de uma instância de BaseClass produz um erro, enquanto um acesso a este membro através de uma instância de uma classe derivada DerivedClass é bem-sucedido. Esta regra de acesso mostra que protected internal permite o acesso a partir de qualquer classe dentro do mesmo assembly ou classes derivadas em qualquer assembly, tornando-o o mais permissivo 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 se sobrepõe um membro virtual, o modificador de acessibilidade do método sobreposto depende do assembly onde define a classe derivada.
Quando defines a classe derivada na mesma assembly da classe base, todos os membros sobrescritos têm protected internal acesso. Se definir a classe derivada numa assembly diferente da classe base, os membros sobrescritos têm 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 da linguagem é a fonte definitiva para a sintaxe e o uso do C#.