Назад Вперед Зміст

Конструктори класів у C#

Що таке конструктор?

Конструктор - це спеціальний метод класу, який викликається при створенні нового об'єкта. Він використовується для ініціалізації полів класу.


public class Car
{
    public string Model { get; }
    public int Year { get; }
    
    // Конструктор
    public Car(string model, int year)
    {
        Model = model;
        Year = year;
        Console.WriteLine($"Створено новий автомобіль {Model} {Year} року");
    }
}

Типи конструкторів

1. Конструктор за замовчуванням

Якщо ви не визначите жодного конструктора, C# створить конструктор за замовчуванням (без параметрів).


public class Book
{
    public string Title { get; set; }
    
    // Неявний конструктор за замовчуванням
    // public Book() { }
}

// Використання:
var book = new Book(); // Працює, навіть якщо конструктор не визначений явно

Примітка: Якщо ви визначите будь-який конструктор з параметрами, конструктор за замовчуванням не буде створюватись автоматично.

2. Конструктор з параметрами

Найпоширеніший тип конструктора, який приймає параметри для ініціалізації об'єкта.


public class Student
{
    public string Name { get; }
    public int Age { get; }
    
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

// Використання:
var student = new Student("Іван Петренко", 20);

3. Перевантаження конструкторів

Клас може мати кілька конструкторів з різними параметрами.

public class Rectangle
{
    public double Width { get; }
    public double Height { get; }
    
    // Конструктор для квадрата
    public Rectangle(double side) : this(side, side) { }
    
    // Основний конструктор
    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }
}

// Використання:
var square = new Rectangle(5);      // Квадрат 5x5
var rect = new Rectangle(4, 6);     // Прямокутник 4x6

Порівняння типів конструкторів

Тип конструктора Призначення Приклад
За замовчуванням Створення об'єкта зі значеннями за замовчуванням public ClassName() { }
З параметрами Ініціалізація об'єкта з конкретними значеннями public ClassName(params) { ... }
Копіювання Створення копії існуючого об'єкта public ClassName(ClassName source) { ... }
Статичний Ініціалізація статичних членів класу static ClassName() { ... }

Приклад класу з різними конструкторами

public class Computer
{
    public string Model { get; }
    public int RamGB { get; }
    public int StorageGB { get; }
    public bool IsLaptop { get; }
    
    // Конструктор за замовчуванням
    public Computer()
    {
        Model = "Не вказано";
        RamGB = 4;
        StorageGB = 256;
        IsLaptop = false;
    }
    
    // Основний конструктор
    public Computer(string model, int ram, int storage, bool isLaptop)
    {
        Model = model;
        RamGB = ram;
        StorageGB = storage;
        IsLaptop = isLaptop;
    }
    
    // Конструктор для ноутбуків
    public Computer(string model, int ram, int storage) 
        : this(model, ram, storage, true) { }
    
    // Конструктор копіювання
    public Computer(Computer source)
    {
        Model = source.Model;
        RamGB = source.RamGB;
        StorageGB = source.StorageGB;
        IsLaptop = source.IsLaptop;
    }
    
    public override string ToString() => 
        $"{(IsLaptop ? "Ноутбук" : "Комп'ютер")} {Model}, RAM: {RamGB}GB, SSD: {StorageGB}GB";
}

// Приклади використання:
var defaultComputer = new Computer();
var gamingPC = new Computer("Gaming Pro", 32, 1000, false);
var laptop = new Computer("UltraBook", 16, 512);
var copy = new Computer(gamingPC);

Поради щодо конструкторів

Ланцюгування конструкторів

Використовуйте this() для виклику інших конструкторів того ж класу:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    public string Address { get; }
    
    public Person(string name) : this(name, 0, "Невідомо") { }
    
    public Person(string name, int age) : this(name, age, "Невідомо") { }
    
    public Person(string name, int age, string address)
    {
        Name = name;
        Age = age;
        Address = address;
    }
}

Увага!

Назад Вперед Зміст