Definiowanie konstruktorów
Twórz wystąpienia za pomocą konstruktorów sparametryzowanych.
Definiowanie konstruktorów 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
Konstruktor to specjalna metoda uruchamiana podczas tworzenia obiektu za pomocą new. Ma taką samą nazwę jak klasa i nie ma typu zwracanego. Jego zadaniem jest doprowadzenie obiektu do poprawnego stanu początkowego.
using System;
class Dog
{
public Dog()
{
Console.WriteLine("A dog was created");
}
}
class Program
{
static void Main()
{
var d = new Dog();
}
}Konstruktory sparametryzowane
Konstruktor może przyjmować parametry, aby wywołujący mógł przekazać wartości początkowe. Jest to najczęstszy sposób ustawiania wymaganych danych.
using System;
class Person
{
public string Name;
public int Age;
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main()
{
var p = new Person("Ada", 36);
Console.WriteLine(p.Name + " is " + p.Age);
}
}Słowo kluczowe this w konstruktorach
Gdy nazwa parametru jest taka sama jak nazwa pola, należy użyć this., aby odwołać się do pola i odróżnić je od parametru.
using System;
class Book
{
public string Title;
public Book(string title)
{
this.Title = title;
}
}
class Program
{
static void Main()
{
var b = new Book("C# Basics");
Console.WriteLine(b.Title);
}
}Konstruktor domyślny
Jeśli nie napiszą Państwo żadnego konstruktora, kompilator udostępni konstruktor bezparametrowy. Jednak gdy tylko zostanie zdefiniowany dowolny konstruktor, domyślny przestaje być dostępny, chyba że zostanie dodany ręcznie.
using System;
class Empty
{
// No constructor written -> compiler supplies a default one
public int Value;
}
class Program
{
static void Main()
{
var e = new Empty();
Console.WriteLine("Default Value: " + e.Value);
}
}Walidacja w konstruktorze
Konstruktor może weryfikować argumenty, gwarantując, że obiekt nigdy nie zostanie utworzony w nieprawidłowym stanie.
using System;
class Account
{
public decimal Balance;
public Account(decimal initial)
{
if (initial < 0)
throw new ArgumentException("Initial balance cannot be negative");
Balance = initial;
}
}
class Program
{
static void Main()
{
var a = new Account(100m);
Console.WriteLine("Balance: " + a.Balance);
}
}Przeciążanie konstruktorów
Klasa może mieć wiele konstruktorów z różnymi listami parametrów. Kompilator wybiera ten, który pasuje do przekazanych argumentów.
using System;
class Point
{
public int X;
public int Y;
public Point()
{
X = 0;
Y = 0;
}
public Point(int x, int y)
{
X = x;
Y = y;
}
}
class Program
{
static void Main()
{
var origin = new Point();
var p = new Point(3, 4);
Console.WriteLine(origin.X + "," + origin.Y + " | " + p.X + "," + p.Y);
}
}Ustawianie właściwości z konstruktora
Konstruktory często przypisują wartości właściwościom automatycznym, w tym właściwościom dostępnym tylko podczas inicjalizacji lub z prywatnym setterem.
using System;
class Product
{
public string Name { get; }
public decimal Price { get; }
public Product(string name, decimal price)
{
Name = name;
Price = price;
}
}
class Program
{
static void Main()
{
var p = new Product("Pen", 1.50m);
Console.WriteLine(p.Name + ": " + p.Price);
}
}Domyślne wartości parametrów
Parametry konstruktora mogą mieć wartości domyślne, dzięki czemu wywołujący może je pominąć. Często ogranicza to potrzebę tworzenia wielu przeciążeń.
using System;
class Circle
{
public double Radius;
public string Color;
public Circle(double radius, string color = "black")
{
Radius = radius;
Color = color;
}
}
class Program
{
static void Main()
{
var c1 = new Circle(2);
var c2 = new Circle(3, "red");
Console.WriteLine(c1.Color + " | " + c2.Color);
}
}Wykonywanie pracy w konstruktorze
Oprócz przypisywania wartości polom konstruktor może obliczać dane pochodne lub przygotowywać zasoby potrzebne obiektowi.
using System;
class Rectangle
{
public double Width;
public double Height;
public double Area;
public Rectangle(double w, double h)
{
Width = w;
Height = h;
Area = w * h;
}
}
class Program
{
static void Main()
{
var r = new Rectangle(4, 5);
Console.WriteLine("Area: " + r.Area);
}
}Konstruktory a wymagane dane
Umieszczenie wymaganych wartości w konstruktorze czyni je obowiązkowymi: nie można utworzyć obiektu bez ich podania.
using System;
class User
{
public string Id;
public string Email;
public User(string id, string email)
{
Id = id;
Email = email;
}
}
class Program
{
static void Main()
{
var u = new User("u1", "a@b.com");
Console.WriteLine(u.Id + " / " + u.Email);
}
}Połączenie elementów
Dobrze zaprojektowany konstruktor weryfikuje dane wejściowe, przypisuje wartości polom i pozostawia obiekt w pełni gotowy do użycia.
using System;
class Temperature
{
public double Celsius { get; }
public double Fahrenheit { get; }
public Temperature(double celsius)
{
if (celsius < -273.15)
throw new ArgumentException("Below absolute zero");
Celsius = celsius;
Fahrenheit = celsius * 9 / 5 + 32;
}
}
class Program
{
static void Main()
{
var t = new Temperature(25);
Console.WriteLine(t.Celsius + "C = " + t.Fahrenheit + "F");
}
}Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat konstruktorów.
Podsumowanie
Konstruktor ma taką samą nazwę jak klasa, nie ma typu zwracanego i jest uruchamiany przy użyciu new. Konstruktory sparametryzowane przyjmują wartości początkowe; this. pozwala odróżnić pola od parametrów. Konstruktory można przeciążać i używać w nich domyślnych wartości parametrów. Zdefiniowanie dowolnego konstruktora usuwa automatycznie wygenerowany konstruktor domyślny.
using System;
class Demo
{
public string Name;
public Demo(string name = "anon")
{
this.Name = name;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Demo().Name);
Console.WriteLine(new Demo("Kai").Name);
}
}Często zadawane pytania
Czy lekcja „Definiowanie konstruktorów” jest bezpłatna?
Tak — pełny tekst „Definiowanie konstruktorów” 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 „Definiowanie konstruktorów”?
Twórz wystąpienia za pomocą konstruktorów sparametryzowanych. Ć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 „Definiowanie konstruktorów”?
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
- Definiowanie konstruktorów
- Łańcuchowanie konstruktorów za pomocą this
- Inicjalizatory obiektów i kolekcji
- Konstruktory statyczne