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 de Structure | Introduction à la Programmation Orientée Objet (POO)
C# Au-Delà des Bases

bookObjets de Classe vs Objets de Structure

Les objets de classe peuvent également être stockés dans des tableaux, des dictionnaires et des listes tout comme les structs. Cependant, il est important de noter que les objets de classe sont passés par référence tandis que les objets struct 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. Examinons un exemple pour mieux comprendre ce concept.

Vous allez créer un simple objet struct et le passer dans une méthode. Vous modifierez sa valeur à l'intérieur de la méthode et observerez ce qu'il advient de la valeur de l'objet original :

index.cs

index.cs

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}"); } }

Le résultat 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 vous passez un objet struct dans une méthode, un duplicata de cet objet est créé et passé dans la méthode, ou en d'autres termes, il est passé par valeur.

Utilisons maintenant exactement le même code, en ne changeant que le terme struct par class :

index.cs

index.cs

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 lorsqu’un objet de classe est passé à une méthode, une référence à l’objet original est transmise à la méthode, de sorte que toute modification de passedObject modifie également originalObject.

Cette propriété s’applique également lors de l’affectation d’objets à des variables. L’exemple suivant illustre le comportement d’un objet struct :

index.cs

index.cs

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 :

index.cs

index.cs

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 illustre 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 la sortie correcte. Le code peut sembler long, mais il s’agit d’un bon exercice de lecture de code.

question mark

Les objets de classe sont :

Select the correct answer

question mark

Le code ci-dessous illustre 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 la sortie correcte. Le code peut sembler long, mais il s’agit d’un bon exercice de lecture de code.

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 2.04

bookObjets de Classe vs Objets de Structure

Glissez pour afficher le menu

Les objets de classe peuvent également être stockés dans des tableaux, des dictionnaires et des listes tout comme les structs. Cependant, il est important de noter que les objets de classe sont passés par référence tandis que les objets struct 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. Examinons un exemple pour mieux comprendre ce concept.

Vous allez créer un simple objet struct et le passer dans une méthode. Vous modifierez sa valeur à l'intérieur de la méthode et observerez ce qu'il advient de la valeur de l'objet original :

index.cs

index.cs

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}"); } }

Le résultat 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 vous passez un objet struct dans une méthode, un duplicata de cet objet est créé et passé dans la méthode, ou en d'autres termes, il est passé par valeur.

Utilisons maintenant exactement le même code, en ne changeant que le terme struct par class :

index.cs

index.cs

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 lorsqu’un objet de classe est passé à une méthode, une référence à l’objet original est transmise à la méthode, de sorte que toute modification de passedObject modifie également originalObject.

Cette propriété s’applique également lors de l’affectation d’objets à des variables. L’exemple suivant illustre le comportement d’un objet struct :

index.cs

index.cs

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 :

index.cs

index.cs

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 illustre 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 la sortie correcte. Le code peut sembler long, mais il s’agit d’un bon exercice de lecture de code.

question mark

Les objets de classe sont :

Select the correct answer

question mark

Le code ci-dessous illustre 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 la sortie correcte. Le code peut sembler long, mais il s’agit d’un bon exercice de lecture de code.

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5
some-alt