Разделяемые (partial) классы, методы и свойства в C#

Разделяемые (partial) классы, методы и свойства в C# позволяют разбивать определение одного типа или метода на несколько файлов. Это особенно полезно при работе с большими проектами, автогенерируемым кодом и командной разработкой.

Разделяемые классы

Разделяемый класс (partial class) — это класс, определение которого может находиться в нескольких файлах. Все части должны иметь модификатор partial и объединяются компилятором в один класс.

Пример использования

Файл Person1.cs:

public partial class Person
{
    public string Name { get; set; }
}

Файл Person2.cs:

public partial class Person
{
    public int Age { get; set; }
}

Файл Program.cs:

using System;

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "Алексей", Age = 30 };
        Console.WriteLine($"Имя: {person.Name}, Возраст: {person.Age}");
    }
}

Консольный вывод

Имя: Алексей, Возраст: 30

Разделяемые методы

Разделяемые (partial) методы позволяют объявить метод в одной части класса и определить его в другой. Если реализация отсутствует, компилятор просто игнорирует его объявление.

Пример использования

Файл PartialMethodExample.cs:

public partial class Example
{
    partial void DisplayMessage();
}

Файл PartialMethodImplementation.cs:

using System;

public partial class Example
{
    partial void DisplayMessage()
    {
        Console.WriteLine("Вызван разделяемый метод");
    }
    
    public void Run()
    {
        DisplayMessage();
    }
}

Файл Program.cs:

class Program
{
    static void Main()
    {
        Example example = new Example();
        example.Run();
    }
}

Консольный вывод

Вызван разделяемый метод

Разделяемые свойства

Разделяемые (partial) свойства работают аналогично методам и позволяют объявить свойство в одной части класса, а определить его в другой.

Пример использования

Файл PartialProperty.cs:

public partial class Data
{
    public partial string Value { get; set; }
}

Файл PartialPropertyImplementation.cs:

public partial class Data
{
    public partial string Value { get; set; } = "Разделяемое свойство";
}

Файл Program.cs:

using System;

class Program
{
    static void Main()
    {
        Data data = new Data();
        Console.WriteLine(data.Value);
    }
}

Консольный вывод

Разделяемое свойство

Когда использовать разделяемые классы, методы и свойства

  • При автогенерации кода (например, в инструментах дизайнера UI).
  • Для разбиения больших классов на логические части.