0Pricing
C# Academy · Lekcja

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

  1. Definiowanie konstruktorów
  2. Łańcuchowanie konstruktorów za pomocą this
  3. Inicjalizatory obiektów i kolekcji
  4. Konstruktory statyczne
← Powrót do C# Academy