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 | Introduktion til Objektorienteret Programmering (OOP)
C# Ud Over Det Grundlæggende

bookKlasseobjekter 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

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

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

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

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 kode, men denne gang 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 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.

question mark

Klasseobjekter er:

Select the correct answer

question mark

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.

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

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

bookKlasseobjekter 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

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

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

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

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 kode, men denne gang 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 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.

question mark

Klasseobjekter er:

Select the correct answer

question mark

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.

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 5
some-alt