0Pricing
C# Academy · Урок

Определение конструкторов

Создавайте экземпляры с помощью конструкторов с параметрами.

«Определение конструкторов» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Что такое конструктор

Конструктор — это специальный метод, который выполняется при создании объекта с помощью new. Он имеет то же имя, что и класс, и не имеет возвращаемого типа. Его задача — привести объект в корректное начальное состояние.

using System;

class Dog
{
    public Dog()
    {
        Console.WriteLine("A dog was created");
    }
}

class Program
{
    static void Main()
    {
        var d = new Dog();
    }
}

Конструкторы с параметрами

Конструктор может принимать параметры, чтобы вызывающий код передавал начальные значения. Это наиболее распространённый способ задать обязательные данные.

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);
    }
}

Ключевое слово this в конструкторах

Если имя параметра совпадает с именем поля, используйте this., чтобы обратиться к полю и отличить его от параметра.

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);
    }
}

Конструктор по умолчанию

Если Вы не напишете ни одного конструктора, компилятор предоставит конструктор без параметров. Но сразу после определения любого конструктора этот конструктор по умолчанию исчезнет, если Вы не добавите его самостоятельно.

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);
    }
}

Проверка в конструкторе

Конструктор может проверять свои аргументы, гарантируя, что объект никогда не будет создан в некорректном состоянии.

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);
    }
}

Перегрузка конструкторов

У класса может быть несколько конструкторов с разными списками параметров. Компилятор выберет тот, который соответствует переданным аргументам.

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);
    }
}

Установка свойств из конструктора

Конструкторы часто присваивают значения автоматически реализуемым свойствам, включая свойства, доступные только при инициализации, или свойства с закрытым методом записи.

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);
    }
}

Значения параметров по умолчанию

Для параметров конструктора можно задать значения по умолчанию, чтобы вызывающий код мог их не указывать. Это часто уменьшает необходимость в нескольких перегруженных конструкторах.

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);
    }
}

Выполнение действий в конструкторе

Помимо присваивания полям, конструктор может вычислять производные данные или подготавливать необходимые объекту ресурсы.

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);
    }
}

Конструкторы и обязательные данные

Размещение обязательных значений в конструкторе делает их действительно обязательными: создать объект без их передачи невозможно.

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);
    }
}

Объединение всего изученного

Хорошо спроектированный конструктор проверяет входные данные, присваивает значения полям и оставляет объект полностью готовым к использованию.

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");
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли тему конструкторов.

Итоги

Конструктор имеет то же имя, что и класс, не имеет возвращаемого типа и запускается при использовании new. Конструкторы с параметрами принимают начальные значения; this. позволяет отличать поля от параметров. Конструкторы можно перегружать и использовать значения параметров по умолчанию. Определение любого конструктора удаляет автоматически созданный конструктор по умолчанию.

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);
    }
}

Часто задаваемые вопросы

Урок «Определение конструкторов» бесплатный?

Да — полный текст урока «Определение конструкторов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Определение конструкторов»?

Создавайте экземпляры с помощью конструкторов с параметрами. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Определение конструкторов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение конструкторов
  2. Цепочка конструкторов с this
  3. Инициализаторы объектов и коллекций
  4. Статические конструкторы
← Назад к C# Academy