Ответ
Ключевое слово partial позволяет разделить определение класса, структуры, интерфейса или метода на несколько исходных файлов. При компиляции все части объединяются.
Основные сценарии использования:
-
Разделение автоматически сгенерированного кода и пользовательских правок. Это самый частый случай, предотвращающий потерю пользовательского кода при повторной генерации.
- WinForms / WPF: Код дизайнера формы (
Form1.Designer.cs) и пользовательский код формы (Form1.cs). - Entity Framework: Классы сущностей, сгенерированные из базы данных, и расширяющие их части для добавления методов.
- WinForms / WPF: Код дизайнера формы (
-
Логическая организация больших классов. Методы, относящиеся к разным аспектам ответственности класса, можно вынести в отдельные файлы (например,
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-методы. Они позволяют объявить сигнатуру в одной части, а реализацию — в другой (часто в сгенерированном коде). Если реализация не предоставлена, компилятор ее удаляет, и вызовы такого метода не происходят.