Condividi tramite


Restrizioni sull'uso dei livelli di accessibilità (Riferimenti per C#)

Quando si specifica un tipo in una dichiarazione, verificare se il livello di accessibilità del tipo dipende dal livello di accessibilità di un membro o di un altro tipo. Ad esempio, la classe base diretta deve essere almeno accessibile come la classe derivata. Le dichiarazioni seguenti causano un errore del compilatore perché la classe BaseClass base è meno accessibile di MyClass:

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

La tabella seguente riepiloga le restrizioni sui livelli di accessibilità dichiarati.

Contesto Osservazioni:
classi La classe base diretta di un tipo di classe deve essere almeno accessibile come il tipo di classe stesso.
Interfacce Le interfacce di base esplicite di un tipo di interfaccia devono essere accessibili almeno quanto il tipo di interfaccia stesso.
Delegati Il tipo restituito e i tipi di parametro di un tipo delegato devono essere almeno accessibili come il tipo delegato stesso.
Costanti Il tipo di una costante deve essere almeno accessibile come la costante stessa.
Campi Il tipo di un campo deve essere accessibile almeno quanto il campo stesso.
Metodi Il tipo restituito e i tipi di parametro di un metodo devono essere almeno accessibili come il metodo stesso.
Proprietà Il tipo di una proprietà deve essere accessibile almeno quanto la proprietà stessa.
Avvenimenti Il tipo di un evento deve essere accessibile almeno quanto l'evento stesso.
Indicizzatori I tipi di tipo e di parametro di un indicizzatore devono essere almeno accessibili come l'indicizzatore stesso.
Operatori Il tipo restituito e i tipi di parametro di un operatore devono essere almeno accessibili come l'operatore stesso.
Costruttori I tipi di parametro di un costruttore devono essere almeno accessibili come il costruttore stesso.

Esempio

L'esempio seguente contiene dichiarazioni errate di tipi diversi. Il commento seguente ogni dichiarazione indica l'errore previsto del compilatore.

// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.

using System;

// A delegate:
delegate int MyDelegate();

class B
{
    // A private method:
    static int MyPrivateMethod()
    {
        return 0;
    }
}

public class A
{
    // Error: The type B is less accessible than the field A.myField.
    public B myField = new B();

    // Error: The type B is less accessible
    // than the constant A.myConst.
    public readonly B myConst = new B();

    public B MyMethod()
    {
        // Error: The type B is less accessible
        // than the method A.MyMethod.
        return new B();
    }

    // Error: The type B is less accessible than the property A.MyProp
    public B MyProp
    {
        set
        {
        }
    }

    MyDelegate d = new MyDelegate(B.MyPrivateMethod);
    // Even when B is declared public, you still get the error:
    // "The parameter B.MyPrivateMethod is not accessible due to
    // protection level."

    public static B operator +(A m1, B m2)
    {
        // Error: The type B is less accessible
        // than the operator A.operator +(A,B)
        return new B();
    }

    static void Main()
    {
        Console.Write("Compiled successfully");
    }
}

Specificazione del linguaggio C#

Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere anche