Notions de base des classes (C# et Java)

Mise à jour : novembre 2007

Les sections suivantes comparent les modificateurs C# et Java.

Modificateurs d'accès

Les modificateurs C# sont assez semblables à ceux de Java, à quelques petites différences près. Chaque membre d'une classe, ou la classe elle-même, peut être déclaré avec un modificateur d'accès pour définir la portée de l'accès autorisé. Les classes qui ne sont pas déclarées à l'intérieur d'autres classes peuvent uniquement spécifier les modificateurs publics ou internes. Les classes imbriquées, comme d'autres membres de classe, peuvent spécifier n'importe lequel des 5 modificateurs d'accès suivants :

  • public

    Visible par tous.

  • protected

    Visible uniquement à partir des classes dérivées.

  • private

    Visible uniquement à l'intérieur de la classe donnée.

  • internal

    Visible uniquement à l'intérieur du même assembly.

  • protected internal

    Visible uniquement à l'assembly courant ou aux types dérivés de la classe conteneur.

Les modificateurs publics, protégés et privés

Un modificateur public rend le membre disponible n'importe où, à la fois à l'intérieur et à l'extérieur de la classe. Un modificateur protected indique que l'accès est limité à l'intérieur de la classe conteneur ou des classent qui en dérivent. Un modificateur private signifie que l'accès est possible uniquement à partir de l'intérieur du type conteneur. En C#, le modificateur d'accès par défaut est privé, tandis qu'en Java, l'accès se fait par défaut à partir de n'importe où à l'intérieur du package conteneur.

Le modificateur internal

Un élément internal est accessible uniquement à l'intérieur de l'assembly courant. Un assembly, dans le .NET Framework équivaut approximativement au fichier JAR de Java. Il correspond à un des blocs de construction à l'aide desquels les programmes sont construits.

Le modificateur protected internal

Un élément protected internal est visible uniquement à l'assembly courant ou aux types dérivés de la classe conteneur.

Le modificateur sealed

Une classe avec le modificateur sealed sur sa déclaration de classe est le contraire d'une classe abstraite : elle ne peut pas être héritée. Vous pouvez marquer une classe comme sealed pour empêcher d'autres classes de substituer sa fonctionnalité. Naturellement, une classe sealed ne peut pas être abstraite. Notez également qu'un struct est implicitement sealed ; par conséquent, il ne peut pas être hérité. Le modificateur sealed équivaut à marquer une classe avec le mot clé final en Java.

Le modificateur readonly

Pour définir une constante en C#, utilisez le modificateur const ou readonly au lieu du mot clé final de Java. Le facteur qui fait la distinction entre les deux modificateurs en C# est que les éléments const sont gérés au moment de la compilation, alors que les valeurs de champs readonly sont spécifiées au moment de l'exécution. Cela signifie que l'assignation aux champs readonly peut se produire dans le constructeur de classe aussi bien que dans la déclaration. Par exemple, la classe suivante déclare une variable readonly appelée IntegerVariable qui est initialisé dans le constructeur de classe :

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

Si un modificateur readonly est appliqué à un champ statique, il doit être initialisé dans le constructeur statique de la classe.

Voir aussi

Concepts

Guide de programmation C#

Référence

Modificateurs d'accès (Guide de programmation C#)

Constantes (Guide de programmation C#)

Autres ressources

Langage de programmation C# pour les développeurs Java