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 |
---|---|
La classe base diretta di un tipo classe deve avere almeno lo stesso livello di accessibilità del tipo classe. |
|
Le interfacce di base esplicite di un tipo di interfaccia devono avere almeno lo stesso livello di accessibilità del tipo di interfaccia. |
|
Il tipo restituito e i tipi di parametri di un tipo delegato devono avere almeno lo stesso livello di accessibilità del tipo delegato. |
|
Il tipo di una costante deve avere almeno lo stesso livello di accessibilità della costante. |
|
Il tipo di un campo deve avere almeno lo stesso livello di accessibilità del campo. |
|
Il tipo restituito e i tipi di parametri di un metodo devono avere almeno lo stesso livello di accessibilità del metodo. |
|
Il tipo di una proprietà deve avere almeno lo stesso livello di accessibilità della proprietà. |
|
Il tipo di un evento deve avere almeno lo stesso livello di accessibilità dell'evento. |
|
Il tipo e i tipi di parametri di un indicizzatore devono avere almeno lo stesso livello di accessibilità dell'indicizzatore. |
|
Il tipo restituito e i tipi di parametri di un operatore devono avere almeno lo stesso livello di accessibilità dell'operatore. |
|
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
Riferimenti
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#)
protected (Riferimenti per C#)