Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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#.