Classes et structs (Guide de programmation C#)Classes and Structs (C# Programming Guide)

Les classes et structs sont deux des constructions de base du système de type commun dans le .NET Framework.Classes and structs are two of the basic constructs of the common type system in the .NET Framework. Chacun est en substance une structure de données qui encapsule un ensemble de données et de comportements constituant une unité logique.Each is essentially a data structure that encapsulates a set of data and behaviors that belong together as a logical unit. Les données et comportements sont les membres de la classe ou du struct, et ils incluent ses méthodes, propriétés, événements, etc., comme indiqué plus loin dans cette rubrique.The data and behaviors are the members of the class or struct, and they include its methods, properties, and events, and so on, as listed later in this topic.

Une déclaration de classe ou de struct est comme un plan utilisé pour créer des instances ou des objets au moment de l'exécution.A class or struct declaration is like a blueprint that is used to create instances or objects at run time. Si vous définissez une classe ou un struct nommé Person, Person est le nom du type.If you define a class or struct called Person, Person is the name of the type. Si vous déclarez et initialisez une variable p de type Person, p est dit objet ou instance de Person.If you declare and initialize a variable p of type Person, p is said to be an object or instance of Person. Plusieurs instances du même type Person peuvent être créées, et chaque instance peut avoir des valeurs différentes dans ses propriétés et champs.Multiple instances of the same Person type can be created, and each instance can have different values in its properties and fields.

Une classe est un type de référence.A class is a reference type. Lorsqu’un objet de la classe est créé, la variable à laquelle l’objet est affecté conserve uniquement une référence à cette mémoire.When an object of the class is created, the variable to which the object is assigned holds only a reference to that memory. Lorsque la référence d’objet est affectée à une variable, la nouvelle variable fait référence à l’objet d’origine.When the object reference is assigned to a new variable, the new variable refers to the original object. Les modifications apportées à une variable sont répercutées sur l’autre variable, car toutes deux font référence aux mêmes données.Changes made through one variable are reflected in the other variable because they both refer to the same data.

Un struct est un type valeur.A struct is a value type. Lorsqu'un struct est créé, la variable à laquelle le struct est assigné contient les données réelles du struct.When a struct is created, the variable to which the struct is assigned holds the struct's actual data. Lorsque le struct est affecté à une nouvelle variable, il est copié.When the struct is assigned to a new variable, it is copied. La nouvelle variable et la variable d’origine contiennent par conséquent deux copies distinctes des mêmes données.The new variable and the original variable therefore contain two separate copies of the same data. Les modifications apportées à une copie n’affectent pas l’autre copie.Changes made to one copy do not affect the other copy.

En général, les classes sont utilisées pour modéliser des comportements plus complexes, ou des données destinées à être modifiées après la création d’un objet de classe.In general, classes are used to model more complex behavior, or data that is intended to be modified after a class object is created. Les structs conviennent mieux aux petites structures de données contenant principalement des données qui ne sont pas censées être modifiées après que la structure a été créé.Structs are best suited for small data structures that contain primarily data that is not intended to be modified after the struct is created.

Pour plus d’informations, consultez Classes, Objets et Structs.For more information, see Classes, Objects, and Structs.

ExempleExample

Dans l’exemple suivant, CustomClass dans l’espace de noms ProgrammingGuide a trois membres : un constructeur d’instance, une propriété nommée Number et une méthode nommée Multiply.In the following example, CustomClass in the ProgrammingGuide namespace has three members: an instance constructor, a property named Number, and a method named Multiply. La méthode Main de la classe Program crée une instance (objet) de CustomClass, et la méthode et la propriété de l’objet sont accessibles avec la notation par points.The Main method in the Program class creates an instance (object) of CustomClass, and the object’s method and property are accessed by using dot notation.

using System;

namespace ProgrammingGuide
{
   // Class definition.
   public class CustomClass
   {
      // Class members.
      //
      // Property.
      public int Number { get; set; }

      // Method.
      public int Multiply(int num)
      {
          return num * Number;
      }

      // Instance Constructor.
      public CustomClass()
      {
          Number = 0;
      }
   }

   // Another class definition that contains Main, the program entry point.
   class Program
   {
      static void Main(string[] args)
      {
         // Create an object of type CustomClass.
         CustomClass custClass = new CustomClass();

         // Set the value of the public property.
         custClass.Number = 27;

         // Call the public method.
         int result = custClass.Multiply(4);
         Console.WriteLine($"The result is {result}.");
      }
   }
}
// The example displays the following output:
//      The result is 108. 

EncapsulationEncapsulation

L’encapsulation est parfois considérée comme le premier pilier ou principe de la programmation orientée objet.Encapsulation is sometimes referred to as the first pillar or principle of object-oriented programming. D'après le principe d'encapsulation, une classe ou un struct peut spécifier le degré d'accessibilité de chacun de ses membres au code situé en dehors de la classe ou du struct.According to the principle of encapsulation, a class or struct can specify how accessible each of its members is to code outside of the class or struct. Les méthodes et variables qui ne sont pas destinées à être utilisées d’en dehors de la classe ou de l’assembly peuvent être masquées afin de limiter le risque d’erreurs ou de code malveillant exploitant une faille de sécurité.Methods and variables that are not intended to be used from outside of the class or assembly can be hidden to limit the potential for coding errors or malicious exploits.

Pour plus d’informations sur les classes, consultez les pages Classes et Objets.For more information about classes, see Classes and Objects.

MembresMembers

Tous les champs, méthodes, constantes, propriétés et événements doivent être déclarés dans un type ; ils sont appelés membres du type.All methods, fields, constants, properties, and events must be declared within a type; these are called the members of the type. En C#, il n’existe aucune variable ou méthode globale, à la différence d’autres langages.In C#, there are no global variables or methods as there are in some other languages. Même le point d’entrée d’un programme, la méthode Main, doit être déclaré dans une classe ou un struct.Even a program's entry point, the Main method, must be declared within a class or struct. La liste suivante inclut tous les types de membres qui peuvent être déclarés dans une classe ou un struct.The following list includes all the various kinds of members that may be declared in a class or struct.

AccessibilitéAccessibility

Certaines méthodes et propriétés sont censées être appelées ou accessibles par le code qui se trouve à l’extérieur de votre classe ou de votre struct, connu sous le terme de code client.Some methods and properties are meant to be called or accessed from code outside your class or struct, known as client code. D’autres méthodes et propriétés peuvent être uniquement utilisables dans la classe ou le struct proprement dits.Other methods and properties might be only for use in the class or struct itself. Il est important de limiter l’accessibilité de votre code afin que seul le code client prévu puisse y accéder.It is important to limit the accessibility of your code so that only the intended client code can reach it. Vous pouvez spécifier l’accessibilité de vos types et de leurs membres vis-à-vis du code client à l’aide des modificateurs d’accès public, protected, internal, protected internal, private et private protected.You specify how accessible your types and their members are to client code by using the access modifiers public, protected, internal, protected internal, private and private protected. L’accessibilité par défaut est private.The default accessibility is private. Pour plus d’informations, consultez la page Modificateurs d’accès.For more information, see Access Modifiers.

HéritageInheritance

Les classes (mais pas les structs) prennent en charge le concept d'héritage.Classes (but not structs) support the concept of inheritance. Une classe qui dérive d’une autre classe (la classe de base) contient automatiquement tous les membres publics, protégés et internes de la classe de base, sauf ses constructeurs et finaliseurs.A class that derives from another class (the base class) automatically contains all the public, protected, and internal members of the base class except its constructors and finalizers. Pour plus d’informations, consultez les pages Héritage et Polymorphisme.For more information, see Inheritance and Polymorphism.

Les classes peuvent être déclarées comme abstraites, ce qui signifie qu’une ou plusieurs de leurs méthodes n’ont aucune implémentation.Classes may be declared as abstract, which means that one or more of their methods have no implementation. Bien que les classes abstraites ne puissent pas être instanciées directement, elles peuvent servir de classes de base à d’autres classes qui fournissent l’implémentation manquante.Although abstract classes cannot be instantiated directly, they can serve as base classes for other classes that provide the missing implementation. Les classes peuvent également être déclarées comme scellées pour empêcher d’autres classes d’hériter d’elles.Classes can also be declared as sealed to prevent other classes from inheriting from them. Pour plus d’informations, consultez la page Classes abstraites et scellées et membres de classe.For more information, see Abstract and Sealed Classes and Class Members.

InterfacesInterfaces

Les classes et les structs peuvent hériter de plusieurs interfaces.Classes and structs can inherit multiple interfaces. Pour un type, hériter d’une interface signifie implémenter toutes les méthodes définies dans l’interface.To inherit from an interface means that the type implements all the methods defined in the interface. Pour plus d’informations, consultez la page Interfaces.For more information, see Interfaces.

Types génériquesGeneric Types

Les classes et structs peuvent être définis avec un ou plusieurs paramètres de type.Classes and structs can be defined with one or more type parameters. Le code client fournit le type lorsqu’il crée une instance du type.Client code supplies the type when it creates an instance of the type. Par exemple, la classe List<T> de l’espace de noms System.Collections.Generic est définie avec un seul paramètre de type.For example The List<T> class in the System.Collections.Generic namespace is defined with one type parameter. Le code client crée une instance d’une List<string> ou d’une List<int> pour spécifier le type que contiendra la liste.Client code creates an instance of a List<string> or List<int> to specify the type that the list will hold. Pour plus d’informations, consultez la page Génériques.For more information, see Generics.

Types statiquesStatic Types

Les classes (mais pas les structs) peuvent être déclarées comme statiques.Classes (but not structs) can be declared as static. Une classe statique ne peut contenir que des membres statiques et ne peut pas être instanciée avec le mot clé new.A static class can contain only static members and cannot be instantiated with the new keyword. Une copie de la classe est chargée en mémoire au chargement du programme, et ses membres sont accessibles par le biais du nom de la classe.One copy of the class is loaded into memory when the program loads, and its members are accessed through the class name. Les classes et les structs peuvent contenir des membres statiques.Both classes and structs can contain static members. Pour plus d’informations, consultez la page Classes statiques et membres de classes statiques.For more information, see Static Classes and Static Class Members.

Types imbriquésNested Types

Une classe ou un struct peut être imbriqué dans une autre classe ou un autre struct.A class or struct can be nested within another class or struct. Pour plus d’informations, consultez Types imbriqués.For more information, see Nested Types.

Types partielsPartial Types

Vous pouvez définir une partie d'une classe, d'un struct ou d'une méthode dans un fichier de code et une autre partie dans un fichier de code séparé.You can define part of a class, struct or method in one code file and another part in a separate code file. Pour plus d’informations, consultez la page Classes et méthodes partielles.For more information, see Partial Classes and Methods.

Initialiseurs d'objetsObject Initializers

Vous pouvez instancier et initialiser des objets de classe et de struct, ainsi que des collections d'objets, sans appeler explicitement leur constructeur.You can instantiate and initialize class or struct objects, and collections of objects, without explicitly calling their constructor. Pour plus d’informations, consultez la page Initialiseurs d’objets et de collections.For more information, see Object and Collection Initializers.

Types anonymesAnonymous Types

Dans les situations où il n’est pas pratique ou nécessaire de créer une classe nommée, par exemple pour remplir une liste avec des structures de données qu’il n’est pas nécessaire de conserver ou de transmettre à une autre méthode, on utilise des types anonymes.In situations where it is not convenient or necessary to create a named class, for example when you are populating a list with data structures that you do not have to persist or pass to another method, you use anonymous types. Pour plus d’informations, consultez la page Types anonymes.For more information, see Anonymous Types.

méthodes d’extension.Extension Methods

Vous pouvez « étendre » une classe sans créer de classe dérivée en créant un type séparé dont les méthodes peuvent être appelées comme si elles appartenaient au type d’origine.You can "extend" a class without creating a derived class by creating a separate type whose methods can be called as if they belonged to the original type. Pour plus d’informations, consultez Méthodes d’extension.For more information, see Extension Methods.

Variables locales implicitement typéesImplicitly Typed Local Variables

Dans une méthode de classe ou de struct, vous pouvez utiliser le type implicite pour indiquer au compilateur de déterminer le type approprié au moment de la compilation.Within a class or struct method, you can use implicit typing to instruct the compiler to determine the correct type at compile time. Pour plus d’informations, consultez la page Variables locales implicitement typées.For more information, see Implicitly Typed Local Variables.

Spécification du langage C#C# Language Specification

Pour plus d'informations, voir la spécification du langage C#.For more information, see the C# Language Specification. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.The language specification is the definitive source for C# syntax and usage.

Voir aussiSee also