0Pricing
C# Academy · Lekcja

Konstruktory główne w strukturach

Stosuj konstruktory główne do typów wartościowych.

Konstruktory główne w strukturach to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 4. 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 4 lekcji w sumie.

Konstruktory podstawowe w strukturach

Struktury również obsługują konstruktory podstawowe: struct Point(int x, int y). Działają podobnie jak w klasach i deklarują parametry w nagłówku.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

Konstruktor bezparametrowy nadal istnieje

Struktury zawsze mają niejawny konstruktor bezparametrowy, który tworzy wartość domyślną. Konstruktor podstawowy dodaje obok niego konstruktor parametryzowany.

using System;

struct Vec(int x, int y) {
    public int X => x;
    public int Y => y;
}

var zero = new Vec(); // default: x=0, y=0
Console.WriteLine(zero.X + "," + zero.Y); // 0,0

Udostępnianie parametrów za pomocą właściwości

Podobnie jak w przypadku klas, parametry konstruktora podstawowego struktury nie stają się automatycznie właściwościami publicznymi — należy jawnie je udostępnić.

using System;

struct Size(int w, int h) {
    public int Width { get; } = w;
    public int Height { get; } = h;
}

var s = new Size(10, 20);
Console.WriteLine(s.Width * s.Height); // 200

Składowe obliczane

Konstruktory podstawowe struktur dobrze współpracują ze składowymi obliczanymi i składowymi z ciałem wyrażeniowym.

using System;

struct Complex(double re, double im) {
    public double Magnitude => Math.Sqrt(re * re + im * im);
}

Console.WriteLine(new Complex(3, 4).Magnitude); // 5

Struktury tylko do odczytu

readonly struct z konstruktorem podstawowym gwarantuje niezmienność. Żadna składowa nie może modyfikować stanu, co doskonale współgra z właściwościami tylko do odczytu.

using System;

readonly struct Money(decimal amount, string currency) {
    public decimal Amount { get; } = amount;
    public string Currency { get; } = currency;
    public string Display => Amount.ToString("0.00") + " " + Currency;
}

Console.WriteLine(new Money(5m, "USD").Display); // 5.00 USD

Łańcuchowanie z konstruktorem podstawowym

Dodatkowe konstruktory struktury muszą wywoływać konstruktor podstawowy za pomocą : this(...), podobnie jak w klasach.

using System;

struct Square(int side) {
    public int Side => side;
    public int Area => side * side;
    public Square() : this(1) { } // explicit default side
}

Console.WriteLine(new Square(4).Area); // 16

Konstruktor domyślny a podstawowy

Należy pamiętać, że new Square() może użyć zarówno niejawnej inicjalizacji zerami, jak i zadeklarowanego konstruktora bezparametrowego. Jeśli zostanie zdefiniowany konstruktor, który łańcuchuje wywołania, wykona się zawarta w nim logika.

using System;

struct Pct(double value) {
    public double Value { get; } = value;
    public Pct() : this(100) { }
}

Console.WriteLine(new Pct().Value); // 100

Semantyka wartości pozostaje bez zmian

Struktury nadal są kopiowane przez wartość. Konstruktor podstawowy tego nie zmienia: przypisanie struktury kopiuje wszystkie jej pola.

using System;

struct Counter(int n) {
    public int N { get; set; } = n;
}

var a = new Counter(1);
var b = a;       // copy
b.N = 99;
Console.WriteLine(a.N + " " + b.N); // 1 99

Inicjalizowanie pól, które można modyfikować

Parametry mogą służyć do inicjalizowania właściwości lub pól z akcesorem set, choć zwykle lepiej wybierać struktury niezmienne.

using System;

struct Bag(int capacity) {
    public int Capacity { get; set; } = capacity;
    public int Used { get; set; } = 0;
}

var bag = new Bag(10);
bag.Used = 3;
Console.WriteLine(bag.Capacity - bag.Used); // 7

Dekonstrukcja

Połącz konstruktor podstawowy z metodą Deconstruct, aby uzyskać rozpakowywanie podobne do rozpakowywania krotek.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public void Deconstruct(out int a, out int b) { a = x; b = y; }
}

var (px, py) = new Point(7, 8);
Console.WriteLine(px + "," + py); // 7,8

Połączenie wszystkiego

Niewielki, niezmienny typ wartości zbudowany za pomocą struktury tylko do odczytu i konstruktora podstawowego.

using System;

readonly struct Temperature(double celsius) {
    public double Celsius { get; } = celsius;
    public double Fahrenheit => Celsius * 9 / 5 + 32;
}

var t = new Temperature(25);
Console.WriteLine(t.Fahrenheit); // 77

Szybkie sprawdzenie

Proszę sprawdzić zrozumienie konstruktorów podstawowych w strukturach.

Podsumowanie

W tej części poznano konstruktory podstawowe w strukturach.

  • struct P(int x, int y) deklaruje parametry w nagłówku.
  • Niejawny konstruktor bezparametrowy nadal istnieje.
  • Połączenie z readonly struct pozwala tworzyć niezmienne typy wartości.
  • Dodatkowe konstruktory łańcuchują wywołania za pomocą : this(...).

Często zadawane pytania

Czy lekcja „Konstruktory główne w strukturach” jest bezpłatna?

Tak — pełny tekst „Konstruktory główne w strukturach” 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 4 lekcji w sumie.

Co nauczysz się w „Konstruktory główne w strukturach”?

Stosuj konstruktory główne do typów wartościowych. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Konstruktory główne w strukturach”?

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. Konstruktory główne w klasach
  2. Przechwytywanie parametrów w elementach składowych
  3. Konstruktory główne w strukturach
  4. Łączenie z właściwościami i typami bazowymi
← Powrót do C# Academy