Klasseobjekter vs Struktur-Objekter
Klasseobjekter kan også gemmes i Arrays, Dictionaries og Lists ligesom structs, men det er vigtigt at bemærke, at klasseobjekter overføres som reference, mens struct-objekter overføres som værdi.
Dette koncept er vigtigt, fordi overførsel af simple værdier som int
, float
eller double
til metoder adskiller sig fra overførsel af komplekse objekter og strukturer til metoder. Lad os se på et eksempel for bedre at forstå dette koncept.
Du vil oprette et simpelt struct-objekt og sende det til en metode. Du vil ændre dets værdi inde fra metoden og se, hvad der sker med værdien af det oprindelige objekt:
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}"); } }
Outputtet viser, at værdien af passedObject
blev opdateret, mens værdien af originalObject
forblev uændret. Dette viser, at når du sender et struct-objekt til en metode, oprettes der en kopi af objektet, som sendes til metoden, eller med andre ord, det overføres som værdi.
Lad os nu bruge nøjagtig den samme kode, kun med ændringen af termen struct
til 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}"); } }
Du vil bemærke, at outputtet har ændret sig – både passedObject
og originalObject
har nu samme værdi. Dette beviser, at når du sender et klasseobjekt ind i en metode, sendes der en reference til det oprindelige objekt ind i metoden, hvilket betyder, at ændringer på passedObject
også ændrer originalObject
.
Denne egenskab gælder også, når objekter tildeles til variabler. Følgende er et eksempel, der viser adfærden for et struct-objekt:
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}"); } }
Den samme kode, men denne gang for et klasseobjekt:
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. Klasseobjekter er:
2. Koden nedenfor demonstrerer brugen af klasseobjekter med lister og ordbøger. Koden er forklaret i kommentarerne. Læs koden og vælg den mulighed, der viser den korrekte output. Koden kan være lang, men det er en god øvelse i at læse kode.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.04
Klasseobjekter vs Struktur-Objekter
Stryg for at vise menuen
Klasseobjekter kan også gemmes i Arrays, Dictionaries og Lists ligesom structs, men det er vigtigt at bemærke, at klasseobjekter overføres som reference, mens struct-objekter overføres som værdi.
Dette koncept er vigtigt, fordi overførsel af simple værdier som int
, float
eller double
til metoder adskiller sig fra overførsel af komplekse objekter og strukturer til metoder. Lad os se på et eksempel for bedre at forstå dette koncept.
Du vil oprette et simpelt struct-objekt og sende det til en metode. Du vil ændre dets værdi inde fra metoden og se, hvad der sker med værdien af det oprindelige objekt:
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}"); } }
Outputtet viser, at værdien af passedObject
blev opdateret, mens værdien af originalObject
forblev uændret. Dette viser, at når du sender et struct-objekt til en metode, oprettes der en kopi af objektet, som sendes til metoden, eller med andre ord, det overføres som værdi.
Lad os nu bruge nøjagtig den samme kode, kun med ændringen af termen struct
til 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}"); } }
Du vil bemærke, at outputtet har ændret sig – både passedObject
og originalObject
har nu samme værdi. Dette beviser, at når du sender et klasseobjekt ind i en metode, sendes der en reference til det oprindelige objekt ind i metoden, hvilket betyder, at ændringer på passedObject
også ændrer originalObject
.
Denne egenskab gælder også, når objekter tildeles til variabler. Følgende er et eksempel, der viser adfærden for et struct-objekt:
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}"); } }
Den samme kode, men denne gang for et klasseobjekt:
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. Klasseobjekter er:
2. Koden nedenfor demonstrerer brugen af klasseobjekter med lister og ordbøger. Koden er forklaret i kommentarerne. Læs koden og vælg den mulighed, der viser den korrekte output. Koden kan være lang, men det er en god øvelse i at læse kode.
Tak for dine kommentarer!