Restrizioni relative all'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 di base diretta deve essere accessibile almeno quanto la classe derivata. Le dichiarazioni seguenti causano un errore del compilatore perché la classe di base BaseClass
è meno accessibile di MyClass
:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
Nella tabella seguente sono riepilogate le restrizioni relative ai livelli di accessibilità dichiarata.
Contesto | Osservazioni: |
---|---|
Classi | La classe di base diretta di un tipo di classe deve essere accessibile almeno quanto il tipo di classe. |
Interfacce | Le interfacce di base esplicite di un tipo di interfaccia devono essere accessibili almeno quanto il tipo di interfaccia. |
Delegati | Il tipo restituito e i tipi di parametro di un tipo delegato devono essere accessibili almeno quanto il tipo delegato. |
Costanti | Il tipo di una costante deve essere accessibile almeno quanto la costante. |
Campi | Il tipo di un campo deve essere accessibile almeno quanto il campo. |
Metodi | Il tipo restituito e i tipi di parametro di un metodo devono essere accessibili almeno quanto il metodo. |
Proprietà | Il tipo di una proprietà deve essere accessibile almeno quanto la proprietà. |
Eventi | Il tipo di un evento deve essere accessibile almeno quanto l'evento. |
Indicizzatori | Il tipo e i tipi di parametro di un indicizzatore devono essere accessibili almeno quanto l'indicizzatore. |
Operatori | Il tipo restituito e i tipi di parametro di un operatore devono essere accessibili almeno quanto l'operatore. |
Costruttori | I tipi di parametro di un costruttore devono essere accessibili almeno quanto il costruttore. |
Esempio
L'esempio seguente contiene dichiarazioni errate di tipi diversi. Il commento che segue ogni dichiarazione indica l'errore del compilatore 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 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#.