Для чего используется ключевое слово partial в C#?

«Для чего используется ключевое слово partial в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные сценарии использования:

  1. Разделение автоматически сгенерированного кода и пользовательских правок. Это самый частый случай, предотвращающий потерю пользовательского кода при повторной генерации.

    • WinForms / WPF: Код дизайнера формы (Form1.Designer.cs) и пользовательский код формы (Form1.cs).
    • Entity Framework: Классы сущностей, сгенерированные из базы данных, и расширяющие их части для добавления методов.
  2. Логическая организация больших классов. Методы, относящиеся к разным аспектам ответственности класса, можно вынести в отдельные файлы (например, User.DataAccess.cs, User.BusinessLogic.cs, User.DTO.cs).

Пример разделения класса:

File: User.Generated.cs

// Автоматически сгенерированный код
public partial class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

File: User.Extensions.cs

// Ручные расширения и логика
public partial class User
{
    public string GetGreeting() => $"Hello, {Name}!";

    public bool Validate()
    {
        return !string.IsNullOrWhiteSpace(Name);
    }
}

Важные правила:

  • Все части класса должны быть объявлены с модификатором partial.
  • Все части должны находиться в одной сборке (assembly) и одном пространстве имен (namespace).
  • Если одна часть объявлена как abstract, sealed или указывает базовый класс, это применяется ко всему классу. Указание базового класса в нескольких частях приведет к ошибке.
  • Также существуют partial-методы. Они позволяют объявить сигнатуру в одной части, а реализацию — в другой (часто в сгенерированном коде). Если реализация не предоставлена, компилятор ее удаляет, и вызовы такого метода не происходят.