Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Objets de Classe vs Objets Struct | Introduction à la Programmation Orientée Objet (POO)
C# au-delà des Bases
course content

Contenu du cours

C# au-delà des Bases

C# au-delà des Bases

1. Structures Supplémentaires et Gestion des Fichiers
2. Structures et Énumérateurs
3. Introduction à la Programmation Orientée Objet (POO)
4. Essentiels de la POO
5. Principes de la POO

book
Objets de Classe vs Objets Struct

Les objets de classe peuvent également être stockés dans des tableaux, des dictionnaires et des listes tout comme les structures, cependant, il est important de noter que les objets de classe sont passés par référence tandis que les objets de structure sont passés par valeur.

Ce concept est important car passer des valeurs simples comme int, float ou double dans des méthodes est différent de passer des objets complexes et des structures dans des méthodes. Regardons un exemple pour mieux comprendre ce concept.

Nous allons créer un simple objet struct et le passer dans une méthode. Nous allons changer sa valeur depuis l'intérieur de la méthode et voir ce qui arrive à la valeur de l'objet original :

cs

index

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

La sortie montre que la valeur de passedObject a été mise à jour tandis que la valeur de originalObject est restée inchangée. Cela montre que lorsque nous passons un objet struct à une méthode, un duplicata de cet objet est créé et passé à la méthode, ou en d'autres termes, il est passé par valeur.

Maintenant, utilisons exactement le même code, en changeant seulement le terme struct en class :

cs

index

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

Vous remarquerez que la sortie a changé - cette fois, passedObject et originalObject ont la même valeur. Cela prouve que lorsque nous passons un objet de classe à une méthode, il passe une référence à l'objet original dans la méthode, ce qui fait que les modifications apportées à passedObject modifient originalObject.

Cette propriété s'applique également lors de l'affectation d'objets à des variables. Voici un exemple qui montre le comportement d'un objet struct :

cs

index

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

Le même code mais cette fois pour un objet de classe :

cs

index

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. Les objets de classe sont :

2. Le code ci-dessous démontre l'utilisation des objets de classe avec des listes et des dictionnaires. Le code est expliqué dans les commentaires. Lisez le code et choisissez l'option qui montre le résultat correct. Le code peut être long, mais c'est un bon exercice de lecture de code.

Les objets de classe sont :

Les objets de classe sont :

Sélectionnez la réponse correcte

Le code ci-dessous démontre l'utilisation des objets de classe avec des listes et des dictionnaires. Le code est expliqué dans les commentaires. Lisez le code et choisissez l'option qui montre le résultat correct. Le code peut être long, mais c'est un bon exercice de lecture de code.

Le code ci-dessous démontre l'utilisation des objets de classe avec des listes et des dictionnaires. Le code est expliqué dans les commentaires. Lisez le code et choisissez l'option qui montre le résultat correct. Le code peut être long, mais c'est un bon exercice de lecture de code.

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt