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. Um membro protegido interno é acessível no assembly atual ou nos tipos que derivam da classe recipiente. Para obter uma comparação com os outros modificadores de protected internal acesso, consulte Níveis de Acessibilidade.
Exemplo
Um membro protegido interno de uma classe base é acessível em qualquer tipo em seu assembly recipiente. Ele também é acessível em uma classe derivada localizada em outro assembly somente se o acesso ocorre 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, myValue, que é acessado pelo tipo TestAccess porque estão no mesmo assembly.
No segundo arquivo, uma tentativa de acesso a myValue por meio de uma instância de BaseClass produzirá um erro, enquanto um acesso a esse membro por meio de uma instância de uma classe derivada, DerivedClass, será bem-sucedido. Isso mostra que protected internal permite o acesso 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 da struct não podem ser protected internal porque uma struct não pode ser herdada.
Substituindo membros internos protegidos
Ao substituir um membro virtual, o modificador de acessibilidade do método substituído depende do assembly em que a classe derivada é definida.
Quando a classe derivada é definida no mesmo assembly que a classe base, todos os membros substituídos têm acesso protected internal. Se a classe derivada for definida em um assembly diferente da classe base, os membros substituídos terão acesso protected.
// 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#.