Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Klasseobjekter vs Struktur-Objekter | Section
C# Utover Det Grunnleggende

bookKlasseobjekter 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

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

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

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

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

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

Den samme koden, men denne gangen for et klasseobjekt:

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. 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.

question mark

Klasseobjekter er:

Select the correct answer

question mark

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.

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 26

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 1. Kapittel 26
some-alt