Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 582новые вакансии за сутки·92 562вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 220
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

Другие направления

  • Проджект-менеджер611
  • UI/UX дизайн145
  • Ручное тестирование14

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме BlazorВсе вопросы
BlazorJuniorТеория

В чём разница между блоком @code и code-behind файлами в Blazor?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

@code { } размещает C#-логику прямо в .razor-файле; code-behind (.razor.cs с partial class) выносит её в отдельный файл. Оба подхода компилируются в один partial class — выбор определяется объёмом логики и требованиями к тестируемости.

Вариант 1: @code блок (всё в одном файле)

@* Counter.razor *@
@page "/counter"

<h1>Count: @count</h1>
<button @onclick="Increment">+1</button>

@code {
    private int count = 0;

    [Parameter]
    public int Step { get; set; } = 1;

    private void Increment() => count += Step;
}

Два способа писать логику компонента

Blazor компилирует каждый .razor-файл в C#-класс. Логику можно разместить двумя способами: прямо в файле через блок @code { }, или в отдельном .razor.cs-файле через partial class.

Вариант 2: code-behind через partial class

@* Counter.razor — только разметка *@
@page "/counter"

<h1>Count: @count</h1>
<button @onclick="Increment">+1</button>
// Counter.razor.cs — логика
namespace MyApp.Pages;

public partial class Counter
{
    private int count = 0;

    [Parameter]
    public int Step { get; set; } = 1;

    private void Increment() => count += Step;
}

Как это работает компилятором

Razor-компилятор генерирует C#-класс с именем файла без расширения. Если файл называется Counter.razor, генерируется partial class Counter. Блок @code { } становится частью этого же partial class. Поэтому Counter.razor.cs с объявлением partial class Counter и @code внутри Counter.razor — это буквально один и тот же класс, просто разбитый по файлам.

Когда что использовать

  • @code: для простых компонентов с небольшим количеством логики (≤50 строк). Всё видно сразу, нет необходимости прыгать между файлами.
  • Code-behind: когда логика объёмная, содержит DI-зависимости, lifecycle-методы и нужно unit-тестирование без рендеринга. Также улучшает поддержку IDE (Resharper, Rider лучше анализируют .cs-файлы, чем .razor).
  • Наследование от ComponentBase: третий вариант — унаследовать базовый класс: @inherits CounterBase. Используется в библиотеках компонентов для разделения API и реализации.

Доступ к protected членам ComponentBase

В code-behind через partial class автоматически доступны все protected члены ComponentBase: StateHasChanged(), InvokeAsync(), OnInitializedAsync() и т.д. — без дополнительных объявлений.

public partial class DataPage
{
    [Inject] private IDataService DataService { get; set; } = default!;

    private List<Item> items = new();

    protected override async Task OnInitializedAsync()
    {
        items = await DataService.GetItemsAsync();
        // StateHasChanged() вызывается автоматически после OnInitializedAsync
    }
}

Подводные камни

  • Имя partial class в .razor.cs должно точно совпадать с именем .razor-файла (без расширения). Ошибка в регистре приводит к созданию двух разных классов вместо одного.
  • Namespace в .razor.cs должен совпадать с неймспейсом, который Razor генерирует по умолчанию (обычно RootNamespace.Папка.Подпапка). При несоответствии компилятор выдаст ошибку о дублировании определений.
  • Нельзя одновременно иметь @code { } в .razor-файле и объявлять одноимённые члены в .razor.cs — будет ошибка дублирования.
  • При использовании @inherits с базовым классом, code-behind не работает — наследование и partial class несовместимы в одном компоненте.
  • IDE-рефакторинги (переименование файла) не всегда обновляют связанный .razor.cs — нужно переименовывать оба файла и класс вручную.
  • В .razor.cs нельзя использовать Razor-синтаксис (@inject, @page) — только атрибуты C# ([Inject], [Parameter]).

Частые вопросы на собеседовании

  • В чём разница между Blazor Server и Blazor WebAssembly?
  • Что такое Blazor и каковы его основные модели хостинга?
  • Как Blazor управляет повторным рендерингом компонентов и как его оптимизировать?
  • В каких типах frontend-проектов Blazor даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Путать @code и partial class code-behind с похожим механизмом из другой версии или платформы.
  • Игнорировать runtime-границы Blazor: lifecycle, DI scope, SQL translation, UI thread или platform API.
  • Не обсуждать null/empty/error cases и поведение под нагрузкой.

Что проверяет интервьюер

  • Кандидат объясняет @code и partial class code-behind на конкретном примере, а не только определением.
  • Указывает последствия для производительности, тестируемости и поддержки.
  • Различает документированное поведение текущего стека и устаревшие практики.

Как вы знаете этот вопрос?

Проверить себя по теме Blazor →

Источники

  • https://learn.microsoft.com/en-us/aspnet/core/blazor/components/

Связанные темы

Blazorruntime-reasoning