Objets 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
123456789101112131415161718192021222324252627using 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
123456789101112131415161718192021222324252627using 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
12345678910111213141516171819202122232425using 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
12345678910111213141516171819202122232425using 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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
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
Objets 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
123456789101112131415161718192021222324252627using 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
123456789101112131415161718192021222324252627using 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
12345678910111213141516171819202122232425using 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
12345678910111213141516171819202122232425using 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.
Merci pour vos commentaires !