Limitations sur l'utilisation des niveaux d'accessibilité (référence C#)
Lorsque vous spécifiez un type dans une déclaration, vérifiez si le niveau d'accessibilité du type dépend du niveau d'accessibilité d'un membre ou d'un autre type. Par exemple, la classe de base directe doit être au moins aussi accessible que la classe dérivée. Les déclarations suivantes entraînent une erreur de compilation, car la classe de base BaseClass est moins accessible que MyClass :
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
Le tableau suivant résume les limitations qui s'appliquent aux niveaux d'accessibilité déclarée.
Contexte |
Remarques |
---|---|
La classe de base directe d'un type de classe doit être au moins aussi accessible que le type de classe lui-même. |
|
Les interfaces de base explicites d'un type d'interface doivent être au moins aussi accessibles que le type d'interface lui-même. |
|
Le type de retour et les types de paramètres d'un type délégué doivent être au moins aussi accessibles que le type délégué lui-même. |
|
Le type d'une constante doit être au moins aussi accessible que la constante elle-même. |
|
Le type d'un champ doit être au moins aussi accessible que le champ lui-même. |
|
Le type de retour et les types de paramètres d'une méthode doivent être au moins aussi accessibles que la méthode elle-même. |
|
Le type d'une propriété doit être au moins aussi accessible que la propriété elle-même. |
|
Le type d'un événement doit être au moins aussi accessible que l'événement lui-même. |
|
Le type et les types de paramètres d'un indexeur doivent être au moins aussi accessibles que l'indexeur lui-même. |
|
Le type de retour et les types de paramètres d'un opérateur doivent être au moins aussi accessibles que l'opérateur lui-même. |
|
Les types de paramètres d'un constructeur doivent être au moins aussi accessibles que le constructeur lui-même. |
Exemple
L'exemple suivant contient des déclarations erronées de différents types. Le commentaire qui suit chaque déclaration indique l'erreur de compilation attendue.
// 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");
}
}
Spécification du langage C#
Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Voir aussi
Référence
Modificateurs d'accès (référence C#)
Domaine d'accessibilité (référence C#)
Niveaux d'accessibilité (référence C#)
Modificateurs d'accès (Guide de programmation C#)