Partilhar via


protegido interno (Referência C#)

A protected internal combinação de palavras-chave é um modificador de acesso de membro. Um membro interno protegido é acessível a partir da assemblagem atual ou de tipos que são derivados da classe que a contém. Para obter uma comparação com os outros modificadores de acesso, consulte Níveis de protected internalacessibilidade.

Exemplo

Um membro interno protegido de uma classe base é acessível a partir de qualquer tipo dentro do assembly que o contém. Ele também é acessível numa classe derivada localizada noutro assembly somente se o acesso ocorrer através de uma variável do tipo da 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, que é acessado pelo tipo TestAccess porque estão na mesma assembly. No segundo arquivo, uma tentativa de acesso 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 terá êxito. 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 protegido.

Os membros do struct não podem ser protected internal porque o struct não pode ser herdado.

Substituindo membros internos protegidos

Ao substituir um membro virtual, o modificador de acessibilidade do método substituído depende do assembly onde a classe derivada é definida.

Quando a classe derivada é definida no mesmo assembly que a classe base, todos os membros sobrepostos têm protected internal acesso. Se a classe derivada for definida num 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 da linguagem é a fonte definitiva para a sintaxe e o uso do C#.

Ver também