0Pricing
C# Academy · Урок

Использование параметров в членах типа

Используйте параметры основного конструктора во всём типе.

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

Использование параметров в членах класса

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

using System;

class Multiplier(int factor) {
    public int Apply(int n) => n * factor;
}

Console.WriteLine(new Multiplier(3).Apply(5)); // 15

Захват и использование только в инициализаторе

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

using System;

class A(int x) {
    public int Stored = x;     // initializer only
}
class B(int x) {
    public int Get() => x;     // captured into a field
}

Console.WriteLine(new A(7).Stored); // 7
Console.WriteLine(new B(9).Get());  // 9

Параметры можно изменять

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

using System;

class Toggle(bool on) {
    public void Flip() => on = !on;
    public bool State => on;
}

var t = new Toggle(false);
t.Flip();
Console.WriteLine(t.State); // True

Предоставление свойств только для чтения

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

using System;

class User(string email) {
    public string Email { get; } = email;
}

Console.WriteLine(new User("a@b.com").Email); // a@b.com

Вычисляемые свойства на основе параметров

Параметры естественно использовать в вычисляемых свойствах с телом-выражением.

using System;

class Money(decimal amount, string currency) {
    public string Display => amount.ToString("0.00") + " " + currency;
}

Console.WriteLine(new Money(9.5m, "USD").Display); // 9.50 USD

Параметры в нескольких методах

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

using System;

class Range2(int lo, int hi) {
    public bool Contains(int n) => n >= lo && n <= hi;
    public int Clamp(int n) => Math.Max(lo, Math.Min(hi, n));
}

var r = new Range2(0, 10);
Console.WriteLine(r.Contains(5)); // True
Console.WriteLine(r.Clamp(15));   // 10

Захват ссылочных типов

Захваченные параметры ссылочного типа позволяют сохранять внедрённые зависимости и вызывать их из любого метода.

using System;
using System.Collections.Generic;

class Repo(List<string> store) {
    public void Add(string item) => store.Add(item);
    public int Count => store.Count;
}

var list = new List<string>();
var repo = new Repo(list);
repo.Add("x");
Console.WriteLine(repo.Count); // 1

Как избежать случайного двойного хранения

Если Вы и присваиваете параметр полю, и используете параметр в методах, значение может сохраниться дважды. Для ясности выберите один подход.

using System;

class Clean(int x) {
    // expose once via property, reference property in methods
    public int Value { get; } = x;
    public int Doubled() => Value * 2;
}

Console.WriteLine(new Clean(4).Doubled()); // 8

Параметры в лямбда-выражениях

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

using System;
using System.Collections.Generic;
using System.Linq;

class Filter(int threshold) {
    public IEnumerable<int> KeepAbove(IEnumerable<int> xs) =>
        xs.Where(n => n > threshold);
}

var f = new Filter(3);
Console.WriteLine(string.Join(",", f.KeepAbove(new[]{1,2,3,4,5}))); // 4,5

Область видимости и время жизни

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

using System;

class Accumulator(int seed) {
    private int total = seed;
    public int Add(int n) { total += n; return total; }
}

var a = new Accumulator(100);
Console.WriteLine(a.Add(1)); // 101
Console.WriteLine(a.Add(1)); // 102

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

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

using System;

class PriceService(decimal taxRate, string currency) {
    public decimal WithTax(decimal net) => net * (1 + taxRate);
    public string Format(decimal v) => v.ToString("0.00") + " " + currency;
}

var s = new PriceService(0.2m, "EUR");
Console.WriteLine(s.Format(s.WithTax(100m))); // 120.00 EUR

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

Проверьте, как сохраняются параметры основного конструктора.

Итоги

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

  • При использовании в методах параметры захватываются во внутренние поля.
  • Если параметры используются только в инициализаторах, дополнительное хранение не требуется.
  • Для удобного открытого интерфейса предоставляйте к ним доступ через свойства только для чтения.
  • В течение времени жизни объекта они ведут себя как состояние экземпляра.

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

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

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

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

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

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

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

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

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

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

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

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

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