Konstruktory główne w klasach
Deklaruj parametry konstruktora w nagłówku typu.
Konstruktory główne w klasach to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 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.
Czym jest konstruktor podstawowy?
Konstruktor podstawowy umożliwia zadeklarowanie parametrów konstruktora bezpośrednio w nagłówku klasy, na przykład class Point(int x, int y). Parametry są dostępne w całym ciele klasy.
using System;
class 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,4Koniec z kodem powtarzalnym
Przed wprowadzeniem konstruktorów podstawowych trzeba było pisać ciało konstruktora tylko po to, aby skopiować parametry do pól. Teraz nagłówek deklaruje parametry, do których można odwoływać się bezpośrednio.
using System;
class Greeter(string name) {
public string Greet() => "Hello, " + name + "!";
}
Console.WriteLine(new Greeter("Ada").Greet()); // Hello, Ada!Parametry są dostępne wszędzie
Parametrów konstruktora podstawowego można używać w inicjalizatorach właściwości, treściach metod i inicjalizatorach pól w dowolnym miejscu klasy.
using System;
class Circle(double radius) {
public double Area => Math.PI * radius * radius;
public double Circumference => 2 * Math.PI * radius;
}
var c = new Circle(2);
Console.WriteLine(Math.Round(c.Area, 2)); // 12.57Inicjowanie pól i właściwości
Parametru konstruktora podstawowego można użyć do zainicjowania pola lub właściwości w miejscu deklaracji.
using System;
class Account(decimal initial) {
public decimal Balance { get; private set; } = initial;
public void Deposit(decimal amount) => Balance += amount;
}
var a = new Account(100m);
a.Deposit(50m);
Console.WriteLine(a.Balance); // 150Walidacja w nagłówku
Parametry konstruktora podstawowego można walidować bezpośrednio, używając wyrażeń throw podczas przypisywania do pola.
using System;
class Person(string name) {
public string Name { get; } =
string.IsNullOrWhiteSpace(name)
? throw new ArgumentException("name required")
: name;
}
Console.WriteLine(new Person("Lin").Name); // LinDodawanie dodatkowych konstruktorów
Klasa z konstruktorem podstawowym może nadal deklarować dodatkowe konstruktory, ale muszą one wywoływać konstruktor podstawowy za pomocą : this(...).
using System;
class Box(int width, int height) {
public int Width => width;
public int Height => height;
public Box(int size) : this(size, size) { }
}
var sq = new Box(5);
Console.WriteLine(sq.Width + "x" + sq.Height); // 5x5Ciała konstruktorów podstawowych
Konstruktory podstawowe nie mają własnego ciała. Logika, która musi zostać wykonana podczas tworzenia obiektu, trafia do inicjalizatorów pól lub do zwykłego konstruktora wywołującego konstruktor podstawowy.
using System;
class Logger(string prefix) {
private readonly string tag = "[" + prefix + "]";
public void Log(string msg) => Console.WriteLine(tag + " " + msg);
}
new Logger("INFO").Log("started"); // [INFO] startedNie są automatycznie publicznymi właściwościami
W przeciwieństwie do rekordów konstruktor podstawowy zwykłej klasy nie tworzy publicznych właściwości. Parametry są prywatne dla klasy, chyba że zostaną przez Państwa jawnie udostępnione.
using System;
class Temp(double celsius) {
// celsius is NOT a public property here
public double Fahrenheit => celsius * 9 / 5 + 32;
}
Console.WriteLine(new Temp(100).Fahrenheit); // 212Przechwycone parametry stają się polami
Gdy parametr konstruktora podstawowego jest używany w metodzie (a nie tylko w inicjalizatorze), kompilator przechwytuje go w ukrytym polu, aby zachować go po utworzeniu obiektu.
using System;
class Counter(int start) {
private int value = start;
public int Next() => value++;
}
var c = new Counter(10);
Console.WriteLine(c.Next()); // 10
Console.WriteLine(c.Next()); // 11Prostsze wstrzykiwanie zależności
Konstruktory podstawowe są często używane w DI: usługi deklaruje się w nagłówku i korzysta z nich w metodach, bez ręcznego przypisywania do pól.
using System;
interface IClock { string Now(); }
class FakeClock : IClock { public string Now() => "12:00"; }
class Service(IClock clock) {
public string Report() => "Time is " + clock.Now();
}
Console.WriteLine(new Service(new FakeClock()).Report()); // Time is 12:00Zastosowanie w praktyce
Ta klasa używa konstruktora podstawowego do przekazania zależności i udostępnia obliczaną właściwość, bez jawnego ciała konstruktora.
using System;
class Rectangle(double w, double h) {
public double Area => w * h;
public double Perimeter => 2 * (w + h);
}
var r = new Rectangle(3, 4);
Console.WriteLine(r.Area + " " + r.Perimeter); // 12 14Szybkie sprawdzenie
Sprawdź swoją znajomość konstruktorów podstawowych w klasach.
Podsumowanie
Poznałeś konstruktory podstawowe w klasach.
class C(int x)deklaruje parametry konstruktora w nagłówku.- Parametry są dostępne w całym ciele klasy.
- Dodatkowe konstruktory wywołują konstruktor podstawowy za pomocą
: this(...). - W zwykłej klasie parametry te nie stają się automatycznie publicznymi właściwościami.
Często zadawane pytania
Czy lekcja „Konstruktory główne w klasach” jest bezpłatna?
Tak — pełny tekst „Konstruktory główne w klasach” 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 klasach”?
Deklaruj parametry konstruktora w nagłówku typu. Ć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 4.
Ile czasu zajmuje lekcja „Konstruktory główne w klasach”?
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
- Konstruktory główne w klasach
- Przechwytywanie parametrów w elementach składowych
- Konstruktory główne w strukturach
- Łączenie z właściwościami i typami bazowymi