Limitations sur l’utilisation des niveaux d’accessibilité (informations de référence sur 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 du compilateur, 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 sur les niveaux d’accessibilité déclarés.

Context Notes
Classes La classe de base directe d’un type de classe doit être au moins aussi accessible que le type de classe lui-même.
Interfaces Les interfaces de base explicites d’un type d’interface doivent être au moins aussi accessibles que le type d’interface lui-même.
Délégués 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.
Constantes Le type d’une constante doit être au moins aussi accessible que la constante elle-même.
Fields Le type d’un champ doit être au moins aussi accessible que le champ lui-même.
Méthodes 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.
Propriétés Le type d’une propriété doit être au moins aussi accessible que la propriété elle-même.
Événements Le type d’un événement doit être au moins aussi accessible que l’événement lui-même.
Indexeurs Le type et les types de paramètres d’un indexeur doivent être au moins aussi accessibles que l’indexeur lui-même.
Opérateurs 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.
Constructeurs 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 du compilateur à attendre.

// 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