0Pricing
C# Academy · Урок

Сочетание со свойствами и базовыми типами

Передавайте параметры базовым типам и свойствам.

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

Сочетание основных конструкторов с наследованием

Производный класс с основным конструктором может передать свои параметры базовому классу с помощью синтаксиса : Base(args) в заголовке.

using System;

class Animal(string name) {
    public string Name => name;
}

class Dog(string name) : Animal(name) {
    public string Speak() => Name + " says Woof";
}

Console.WriteLine(new Dog("Rex").Speak()); // Rex says Woof

Передача части параметров

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

using System;

class Shape(string color) {
    public string Color => color;
}

class Box(string color, int size) : Shape(color) {
    public int Size => size;
}

var b = new Box("red", 5);
Console.WriteLine(b.Color + " " + b.Size); // red 5

Преобразование аргументов для базового класса

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

using System;

class Label(string text) {
    public string Text => text;
}

class UpperLabel(string text) : Label(text.ToUpper()) {
}

Console.WriteLine(new UpperLabel("hi").Text); // HI

Добавление свойств

Основной конструктор и явно объявленные свойства могут существовать вместе. Инициализируйте свойства из параметров при объявлении.

using System;

class Product(string name, decimal price) {
    public string Name { get; } = name;
    public decimal Price { get; set; } = price;
}

var p = new Product("Book", 12m);
p.Price = 10m;
Console.WriteLine(p.Name + " " + p.Price); // Book 10

Параметры базового класса и использование в производном

Даже после передачи параметра базовому классу параметр основного конструктора производного класса можно использовать в теле производного класса.

using System;

class Base(int id) {
    public int Id => id;
}

class Item(int id, string label) : Base(id) {
    public string Describe() => "#" + id + ": " + label;
}

Console.WriteLine(new Item(7, "Widget").Describe()); // #7: Widget

Записи и основные конструкторы

Записи используют основные конструкторы для автоматического создания общедоступных свойств, доступных только для инициализации. Позиционная запись — самый краткий вариант.

using System;

record Person(string First, string Last) {
    public string Full => First + " " + Last;
}

Console.WriteLine(new Person("Ada", "Lovelace").Full); // Ada Lovelace

Наследование записей

Производные записи позиционно передают параметры базовой записи, создавая объединённый набор свойств.

using System;

record Vehicle(string Make);
record Car(string Make, int Doors) : Vehicle(Make);

var c = new Car("Toyota", 4);
Console.WriteLine(c.Make + " " + c.Doors); // Toyota 4

Проверка перед вызовом базового конструктора

Если нужна проверка, выполните её в инициализаторе свойства с помощью выражения выброса исключения; вызов базового конструктора всё равно выполняется первым.

using System;

class Base(string tag) { public string Tag => tag; }

class Node(string tag) : Base(tag) {
    public string Tag2 { get; } =
        tag.Length > 0 ? tag : throw new ArgumentException("empty");
}

Console.WriteLine(new Node("a").Tag); // a

Сочетание захваченных параметров и свойств

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

using System;

class Order(int id, decimal total) {
    public decimal Total { get; } = total; // public
    public string Reference() => "ORD-" + id;   // id stays private
}

var o = new Order(42, 99m);
Console.WriteLine(o.Reference() + " " + o.Total); // ORD-42 99

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

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

using System;

class Session(string user) {
    public string User { get; } = user;
    public bool Active { get; set; } = true;
}

var s = new Session("kai");
Console.WriteLine(s.User + " " + s.Active); // kai True

Собираем всё вместе

Производный класс, который передаёт параметры базовому классу, добавляет свойство и предоставляет вычисляемый член.

using System;

class Employee(string name) {
    public string Name => name;
}

class Manager(string name, int teamSize) : Employee(name) {
    public int TeamSize { get; } = teamSize;
    public string Title => Name + " (manages " + TeamSize + ")";
}

Console.WriteLine(new Manager("Sam", 5).Title); // Sam (manages 5)

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

Проверьте, как основные конструкторы передают параметры базовым классам.

Итоги

Вы узнали, как сочетать основные конструкторы со свойствами и базовыми классами.

  • class D(...) : Base(args) передаёт параметры базовому классу.
  • Аргументы базового класса можно вычислять прямо в заголовке.
  • Свойства можно инициализировать из параметров при объявлении.
  • Записи создают общедоступные свойства, доступные только для инициализации, из позиционных параметров.

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

Урок «Сочетание со свойствами и базовыми типами» бесплатный?

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

Чему я научусь в уроке «Сочетание со свойствами и базовыми типами»?

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

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

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

Сколько времени занимает урок «Сочетание со свойствами и базовыми типами»?

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

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

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

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

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