Condividi tramite


Restrizioni relative all'utilizzo dei livelli di accessibilità (Riferimenti per C#)

Aggiornamento: novembre 2007

Quando si dichiara un tipo, è fondamentale verificare se tale tipo dispone almeno dello stesso livello di accessibilità di un altro membro o tipo. Ad esempio, la classe base diretta deve avere almeno la stessa accessibilità della classe derivata. Le dichiarazioni seguenti generano un errore di compilazione in quanto la classe base BaseClass è meno accessibile di MyClass:

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

Nella seguente tabella sono riepilogate le restrizioni relative all'utilizzo dei livelli di accessibilità.

Context

Osservazioni

Classi

La classe base diretta di un tipo classe deve avere almeno lo stesso livello di accessibilità del tipo classe.

Interfacce

Le interfacce di base esplicite di un tipo di interfaccia devono avere almeno lo stesso livello di accessibilità del tipo di interfaccia.

Delegati

Il tipo restituito e i tipi di parametri di un tipo delegato devono avere almeno lo stesso livello di accessibilità del tipo delegato.

Costanti

Il tipo di una costante deve avere almeno lo stesso livello di accessibilità della costante.

Campi

Il tipo di un campo deve avere almeno lo stesso livello di accessibilità del campo.

Metodi

Il tipo restituito e i tipi di parametri di un metodo devono avere almeno lo stesso livello di accessibilità del metodo.

Proprietà

Il tipo di una proprietà deve avere almeno lo stesso livello di accessibilità della proprietà.

Eventi

Il tipo di un evento deve avere almeno lo stesso livello di accessibilità dell'evento.

Indicizzatori

Il tipo e i tipi di parametri di un indicizzatore devono avere almeno lo stesso livello di accessibilità dell'indicizzatore.

Operatori

Il tipo restituito e i tipi di parametri di un operatore devono avere almeno lo stesso livello di accessibilità dell'operatore.

Costruttori

I tipi dei parametri di un costruttore devono avere almeno lo stesso livello di accessibilità del costruttore.

Esempio

L'esempio riportato di seguito contiene dichiarazioni errate di tipi diversi. Il commento che segue ciascuna dichiarazione indica l'errore di compilazione previsto.

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

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 3.5.1 Accessibilità dichiarata

  • 3.5.4 Vincoli di accessibilità

  • 10.3.5 Modificatori di accesso

  • 10.3.8.2 Accessibilità dichiarata

  • 10.3.8.5 Accesso ai membri privati e protetti del tipo contenitore

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Parole chiave di C#

Modificatori di accesso (Riferimenti per C#)

Dominio di accessibilità (Riferimenti per C#)

Livelli di accessibilità (Riferimenti per C#)

Modificatori di accesso (Guida per programmatori C#)

public (Riferimenti per C#)

private (Riferimenti per C#)

protected (Riferimenti per C#)

internal (Riferimenti per C#)

Altre risorse

Riferimenti per C#