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

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.

Champs

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 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, consultez 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

Mots clés C#

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#)

public (référence C#)

private (référence C#)

protected (référence C#)

internal (Référence C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#