Сочетание со свойствами и базовыми типами
Передавайте параметры базовым типам и свойствам.
«Сочетание со свойствами и базовыми типами» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Основные конструкторы классов
- Использование параметров в членах типа
- Основные конструкторы структур
- Сочетание со свойствами и базовыми типами