Kopiering af Arrays og Hukommelse
Stryg for at vise menuen
Når du arbejder med arrays i C#, er det vigtigt at forstå, hvordan de lagres i hukommelsen, og hvad der sker, når du kopierer eller tildeler dem. Arrays i C# er referencetyper, hvilket betyder, at variabler indeholder en reference (eller pointer) til det sted, hvor arrayets data er lagret i hukommelsen, ikke selve dataene. Dette har væsentlige konsekvenser, når du tildeler én array-variabel til en anden, eller når du ønsker at lave en reel kopi af et arrays indhold. Hvis du overser disse detaljer, kan du utilsigtet ændre data steder, du ikke havde til hensigt, hvilket kan føre til fejl, der er svære at finde.
Program.cs
12345678910111213141516171819202122232425262728293031namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] original = { 1, 2, 3, 4, 5 }; // Assigning the array reference int[] assigned = original; // Copying the array elements int[] copied = new int[original.Length]; for (int i = 0; i < original.Length; i++) { copied[i] = original[i]; } // Modify the assigned array assigned[0] = 99; // Modify the copied array copied[1] = 77; System.Console.WriteLine("original: " + string.Join(", ", original)); System.Console.WriteLine("assigned: " + string.Join(", ", assigned)); System.Console.WriteLine("copied: " + string.Join(", ", copied)); } } }
Når du tildeler én array-variabel til en anden, peger begge variabler på den samme hukommelsesplacering. Det betyder, at en ændring foretaget gennem den ene variabel også vises i den anden, fordi de blot er to referencer til det samme array. Hvis du vil undgå dette, skal du kopiere hvert element til et nyt array, som vist i koden ovenfor. Dette opretter et nyt array i hukommelsen, så ændringer i det ene array ikke påvirker det andet.
Dette fører til begreberne shallow copy og deep copy. En shallow copy kopierer kun referencen til arrayet, ikke selve elementerne. En deep copy opretter et nyt array og kopierer hvert element over i det, hvilket resulterer i to uafhængige arrays.
Program.cs
1234567891011121314151617namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 10, 20, 30 }; int[] shallow = numbers; shallow[1] = 99; System.Console.WriteLine("numbers: " + string.Join(", ", numbers)); System.Console.WriteLine("shallow: " + string.Join(", ", shallow)); } } }
Eksemplet viser, hvad der sker, når du udfører en overfladisk kopiering af et array i C#. Når du tildeler én array-variabel til en anden, såsom int[] shallow = numbers, opretter du ikke et nyt array eller kopierer elementerne. I stedet peger begge variabler, numbers og shallow, på det samme array i hukommelsen. Det betyder, at enhver ændring, du foretager gennem den ene variabel, vil være synlig gennem den anden.
En overfladisk kopiering kopierer referencen til arrayet, så begge variabler peger på samme hukommelsesplacering. En dyb kopiering opretter et nyt array og kopierer alle elementer, så de to arrays er uafhængige af hinanden.
1. Hvad sker der, når du tildeler én array-variabel til en anden i C#?
2. Hvordan kan du oprette en ægte kopi af et array?
3. Hvorfor er det vigtigt at forstå array-hukommelse, når man manipulerer data?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat