Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Klassobjekt kontra Struktur-Objekt | Introduktion till Objektorienterad Programmering (OOP)
C# Bortom Grunderna

bookKlassobjekt kontra Struktur-Objekt

Klassobjekt kan också lagras i arrayer, ordböcker och listor precis som strukturer, men det är viktigt att notera att klassobjekt överförs som referenser medan struktobjekt överförs som värden.

Detta koncept är viktigt eftersom det skiljer sig åt att skicka enkla värden som int, float eller double till metoder jämfört med att skicka komplexa objekt och strukturer till metoder. Låt oss titta på ett exempel för att förstå detta koncept bättre.

Du kommer att skapa ett enkelt struktobjekt och skicka det till en metod. Du kommer att ändra dess värde inifrån metoden och se vad som händer med värdet på det ursprungliga 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}"); } }

Utdata visar att värdet på passedObject uppdaterades medan värdet på originalObject förblev oförändrat. Detta visar att när du skickar ett struktobjekt till en metod skapas en kopia av det objektet och skickas till metoden, eller med andra ord, det överförs som värde.

Nu använder vi exakt samma kod, men byter ut termen struct mot 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 kommer att märka att utdata har ändrats – både passedObject och originalObject har nu samma värde. Detta bevisar att när du skickar ett klassobjekt till en metod, skickas en referens till det ursprungliga objektet in i metoden, vilket gör att ändringar på passedObject även ändrar originalObject.

Denna egenskap gäller också när objekt tilldelas variabler. Nedan följer ett exempel som visar beteendet hos ett 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}"); } }

Samma kod men denna gång för ett klassobjekt:

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. Klassobjekt är:

2. Koden nedan visar användningen av klassobjekt med listor och ordböcker. Koden förklaras i kommentarerna. Läs koden och välj det alternativ som visar rätt utdata. Koden kan vara lång, men det är en bra övning i kodläsning.

question mark

Klassobjekt är:

Select the correct answer

question mark

Koden nedan visar användningen av klassobjekt med listor och ordböcker. Koden förklaras i kommentarerna. Läs koden och välj det alternativ som visar rätt utdata. Koden kan vara lång, men det är en bra övning i kodläsning.

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 5

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain why structs are passed by value and classes by reference?

Can you provide a real-world scenario where this difference matters?

What happens if I modify a property of a class object inside a method?

Awesome!

Completion rate improved to 2.04

bookKlassobjekt kontra Struktur-Objekt

Svep för att visa menyn

Klassobjekt kan också lagras i arrayer, ordböcker och listor precis som strukturer, men det är viktigt att notera att klassobjekt överförs som referenser medan struktobjekt överförs som värden.

Detta koncept är viktigt eftersom det skiljer sig åt att skicka enkla värden som int, float eller double till metoder jämfört med att skicka komplexa objekt och strukturer till metoder. Låt oss titta på ett exempel för att förstå detta koncept bättre.

Du kommer att skapa ett enkelt struktobjekt och skicka det till en metod. Du kommer att ändra dess värde inifrån metoden och se vad som händer med värdet på det ursprungliga 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}"); } }

Utdata visar att värdet på passedObject uppdaterades medan värdet på originalObject förblev oförändrat. Detta visar att när du skickar ett struktobjekt till en metod skapas en kopia av det objektet och skickas till metoden, eller med andra ord, det överförs som värde.

Nu använder vi exakt samma kod, men byter ut termen struct mot 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 kommer att märka att utdata har ändrats – både passedObject och originalObject har nu samma värde. Detta bevisar att när du skickar ett klassobjekt till en metod, skickas en referens till det ursprungliga objektet in i metoden, vilket gör att ändringar på passedObject även ändrar originalObject.

Denna egenskap gäller också när objekt tilldelas variabler. Nedan följer ett exempel som visar beteendet hos ett 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}"); } }

Samma kod men denna gång för ett klassobjekt:

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. Klassobjekt är:

2. Koden nedan visar användningen av klassobjekt med listor och ordböcker. Koden förklaras i kommentarerna. Läs koden och välj det alternativ som visar rätt utdata. Koden kan vara lång, men det är en bra övning i kodläsning.

question mark

Klassobjekt är:

Select the correct answer

question mark

Koden nedan visar användningen av klassobjekt med listor och ordböcker. Koden förklaras i kommentarerna. Läs koden och välj det alternativ som visar rätt utdata. Koden kan vara lång, men det är en bra övning i kodläsning.

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 5
some-alt