private protected (informazioni di riferimento su C#)private protected (C# Reference)

La combinazione delle parole chiave private protected è un modificatore di accesso ai membri.The private protected keyword combination is a member access modifier. Un membro protetto privato è accessibile per i tipi derivati dalla classe che lo contiene, ma solo all'interno dell'assembly che lo contiene.A private protected member is accessible by types derived from the containing class, but only within its containing assembly. Per un confronto di private protected con altri modificatori di accesso, vedere Livelli di accessibilità.For a comparison of private protected with the other access modifiers, see Accessibility Levels.

Nota

Il modificatore di accesso private protected è valido in C# versione 7.2 e versioni successive.The private protected access modifier is valid in C# version 7.2 and later.

EsempioExample

Un membro protetto privato di una classe base è accessibile dai tipi derivati nell'assembly che lo contiene solo se il tipo statico della variabile è il tipo della classe derivata.A private protected member of a base class is accessible from derived types in its containing assembly only if the static type of the variable is 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
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;  

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs  
// Compile with: /reference:Assembly1.dll  
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // 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 tipo derivato, DerivedClass1.The first file contains a public base class, BaseClass, and a type derived from it, DerivedClass1. BaseClass è proprietaria di un membro protetto privato, myValue, a cui DerivedClass1 prova ad accedere in due modi.BaseClass owns a private protected member, myValue, which DerivedClass1 tries to access in two ways. Il primo tentativo di accedere a myValue tramite un'istanza di BaseClass genererà un errore.The first attempt to access myValue through an instance of BaseClass will produce an error. Il tentativo di usarlo come membro ereditato in DerivedClass1 avrà, tuttavia, esito positivo.However, the attempt to use it as an inherited member in DerivedClass1 will succeed. Nel secondo file un tentativo di accedere a myValue come membro ereditato di DerivedClass2 genererà un errore, perché è accessibile solo per i tipi derivati in Assembly1.In the second file, an attempt to access myValue as an inherited member of DerivedClass2 will produce an error, as it is only accessible by derived types in Assembly1.

I membri struct non possono essere private protected perché struct non può essere ereditato.Struct members cannot be private protected 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