C# Academy · Lekcja

Struktury: semantyka wartości i wzorzec niezmienności

Poznaj semantykę wartości struktur w C# 6 i zbuduj wzorzec niezmiennej struktury (kopiowanie przy zmianie).

Lekcja 1 z 38 kroki

Struktury: semantyka wartości i wzorzec niezmienności to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Przegląd struktur

Cel: Bezpieczne używanie struktur.

  • Semantyka wartości (kopiowanie przy przypisaniu)
  • Wzorzec niezmiennej struktury w C# 6
  • Przekazywanie przez wartość a przez ref
  • Uwaga dotycząca Boxing

Semantyka kopiowania

Struktury są typami wartości: przypisanie tworzy kopię. Zmiana kopii nie zmienia oryginału.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

Wzorzec niezmiennej struktury

Preferuj niezmienne struktury: pola readonly, konstruktor ustawiający wymagany stan oraz małe pomocnicze metody With tworzące nowe wartości.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Przez wartość a przez ref

Metody domyślnie otrzymują kopię. Używaj ref, aby modyfikować strukturę wywołującego.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Podstawy Boxing

Boxing kopiuje strukturę do odwołania typu object/interface. Unboxing tworzy kolejną kopię.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Wskazówki dotyczące struktur

Wskazówki:

  • Używaj struktur dla małych, niezmiennych obiektów wartościowych (współrzędnych, kwot).
  • Unikaj dużych lub często modyfikowanych struktur.
  • Pamiętaj o kopiowaniu przy przypisywaniu i przekazywaniu przez wartość.
  • Zwracaj uwagę na Boxing podczas rzutowania na object/interface.

Semantyka wartości struktur

Szybkie sprawdzenie: Które stwierdzenie najlepiej opisuje semantykę wartości struktury w języku C#?

Podsumowanie

Podsumowanie: Struktury są typami wartości. Preferuj małe, niezmienne projekty (konstruktor + pola readonly + With). Wiedz, jak przekazywanie przez wartość i przez ref oraz Boxing wpływają na tworzenie kopii.

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „Struktury: semantyka wartości i wzorzec niezmienności” jest bezpłatna?

Tak — pełny tekst „Struktury: semantyka wartości i wzorzec niezmienności” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Struktury: semantyka wartości i wzorzec niezmienności”?

Poznaj semantykę wartości struktur w C# 6 i zbuduj wzorzec niezmiennej struktury (kopiowanie przy zmianie). Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „Struktury: semantyka wartości i wzorzec niezmienności”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Struktury: semantyka wartości i wzorzec niezmienności
  2. Typy podobne do rekordów i równość oparta na wartościach (wzorzec)
  3. Enumy i [Flags]
← Powrót do C# Academy