Restrizioni relative all'utilizzo 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 altro 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 ai livelli di accessibilità dichiarati.
Contesto |
Note |
---|---|
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 la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.
Vedere anche
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#)