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 | Introduksjon til Objektorientert Programmering (OOP)
C# Utover Det Grunnleggende

bookKlasseobjekter 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

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 3. Kapittel 5

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

Awesome!

Completion rate improved to 2.04

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 3. Kapittel 5
some-alt