Klasseobjekter vs Struktur-Objekter
Klasseobjekter kan også lagres i Arrays, Dictionaries og Lists på samme måte som strukturer, men det er viktig å merke seg at klasseobjekter sendes som referanse mens struktur-objekter sendes som verdi.
Dette konseptet er viktig fordi det å sende enkle verdier som int
, float
eller double
inn i metoder er forskjellig fra å sende komplekse objekter og strukturer inn i metoder. La oss se på et eksempel for å forstå dette konseptet bedre.
Du skal opprette et enkelt struktur-objekt og sende det inn i en metode. Du vil endre verdien fra innsiden av metoden og se hva som skjer med verdien til det opprinnelige objektet:
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}"); } }
Utdataene viser at verdien til passedObject
ble oppdatert, mens verdien til originalObject
forble uendret. Dette viser at når du sender et struktur-objekt inn i en metode, blir en kopi av objektet opprettet og sendt inn i metoden, eller med andre ord, det sendes som verdi.
Nå skal vi bruke nøyaktig samme kode, men kun endre begrepet 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 legge merke til at utdataene har endret seg – både passedObject
og originalObject
har samme verdi denne gangen. Dette beviser at når du sender et klasseobjekt inn i en metode, sendes en referanse til det opprinnelige objektet inn i metoden, slik at endringer på passedObject
også endrer originalObject
.
Denne egenskapen gjelder også når objekter tilordnes til variabler. Følgende er et eksempel som viser oppførselen til et struktur-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 koden, men denne gangen 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 bruk av klasseobjekter med lister og ordbøker. Koden er forklart i kommentarene. Les koden og velg alternativet som viser riktig utdata. Koden kan være lang, men det er en god øvelse i å lese kode.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 2.04
Klasseobjekter vs Struktur-Objekter
Sveip for å vise menyen
Klasseobjekter kan også lagres i Arrays, Dictionaries og Lists på samme måte som strukturer, men det er viktig å merke seg at klasseobjekter sendes som referanse mens struktur-objekter sendes som verdi.
Dette konseptet er viktig fordi det å sende enkle verdier som int
, float
eller double
inn i metoder er forskjellig fra å sende komplekse objekter og strukturer inn i metoder. La oss se på et eksempel for å forstå dette konseptet bedre.
Du skal opprette et enkelt struktur-objekt og sende det inn i en metode. Du vil endre verdien fra innsiden av metoden og se hva som skjer med verdien til det opprinnelige objektet:
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}"); } }
Utdataene viser at verdien til passedObject
ble oppdatert, mens verdien til originalObject
forble uendret. Dette viser at når du sender et struktur-objekt inn i en metode, blir en kopi av objektet opprettet og sendt inn i metoden, eller med andre ord, det sendes som verdi.
Nå skal vi bruke nøyaktig samme kode, men kun endre begrepet 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 legge merke til at utdataene har endret seg – både passedObject
og originalObject
har samme verdi denne gangen. Dette beviser at når du sender et klasseobjekt inn i en metode, sendes en referanse til det opprinnelige objektet inn i metoden, slik at endringer på passedObject
også endrer originalObject
.
Denne egenskapen gjelder også når objekter tilordnes til variabler. Følgende er et eksempel som viser oppførselen til et struktur-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 koden, men denne gangen 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 bruk av klasseobjekter med lister og ordbøker. Koden er forklart i kommentarene. Les koden og velg alternativet som viser riktig utdata. Koden kan være lang, men det er en god øvelse i å lese kode.
Takk for tilbakemeldingene dine!