protected internal (Riferimenti per C#)protected internal (C# Reference)

La combinazione delle parole chiave protected internal è un modificatore di accesso ai membri.The protected internal keyword combination is a member access modifier. Un membro protected internal è accessibile dall'assembly corrente o dai tipi che derivano dalla classe che li contiene.A protected internal member is accessible from the current assembly or from types that are derived from the containing class. Per un confronto di protected internal con altri modificatori di accesso, vedere Livelli di accessibilità.For a comparison of protected internal with the other access modifiers, see Accessibility Levels.

EsempioExample

Un membro protected internal di una classe base è accessibile da qualsiasi tipo all'interno dell'assembly che lo contiene.A protected internal member of a base class is accessible from any type within its containing assembly. È inoltre accessibile in una classe derivata che si trova in un altro assembly solo se l'accesso viene eseguito tramite una variabile del tipo di classe derivata.It is also accessible in a derived class located in another assembly only if the access occurs through a variable of the derived class type. Si consideri il segmento di codice di esempio seguente:For example, consider the following code segment:

// 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;
    }
}

Questo esempio contiene due file, Assembly1.cs e Assembly2.cs.This example contains two files, Assembly1.cs and Assembly2.cs. Il primo file contiene una classe base pubblica, BaseClass, e un'altra classe, TestAccess.The first file contains a public base class, BaseClass, and another class, TestAccess. BaseClass è proprietario di un membro protected internal, myValue, a cui si accede dal tipo TestAccess.BaseClass owns a protected internal member, myValue, which is accessed by the TestAccess type. Nel secondo file un tentativo di accedere a myValue tramite un'istanza di BaseClass produrrà un errore, mentre l'accesso a questo membro tramite un'istanza di una classe derivata, DerivedClass, avrà esito positivo.In the second file, an attempt to access myValue through an instance of BaseClass will produce an error, while an access to this member through an instance of a derived class, DerivedClass will succeed.

I membri struct non possono essere protected internal perché struct non può essere ereditato.Struct members cannot be protected internal because the struct cannot be inherited.

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere la specifica del linguaggio C#.For more information, see the C# Language Specification. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.The language specification is the definitive source for C# syntax and usage.

Vedere ancheSee also