Частичные классы и методы в C#: понимание и применение
Понимание частичных классов и методов в C#
Эта статья объясняет, как и почему разработчики C# используют частичные классы и частичные методы для управления большими кодовыми базами, эффективной совместной работы и оптимизации компиляции.
Когда несколько разработчиков работают над одним обширным классом, или когда нужно объединить написанный вручную код с кодом, генерируемым инструментами вроде Visual Studio, ключевое слово partial в C# предлагает чистое решение.
Что такое частичный класс?
Частичный класс позволяет разделить определение одного класса на два или более исходных файла. Каждый файл содержит фрагмент класса, а компилятор соединяет их во время сборки. Ключевое слово partial должно присутствовать в каждой части класса.
Пример 1 – Разделение простого класса
Рассмотрим проект HeightWeightInfo, хранящий рост и вес человека.
namespace HeightWeightInfo {
public partial class Record {
private int h;
private int w;
public Record(int h, int w) {
this.h = h;
this.w = w;
}
}
}
Тот же класс Record продолжается во втором файле.
namespace HeightWeightInfo {
public partial class Record {
public void PrintRecord() {
Console.WriteLine("Height:" + h);
Console.WriteLine("Weight:" + w);
}
}
}
Наконец, программа, использующая класс:
namespace HeightWeightInfo {
class Program {
static void Main(string[] args) {
Record myRecord = new Record(10, 15);
myRecord.PrintRecord();
Console.ReadLine();
}
}
}
Компилятор объединяет два определения Record в один класс, содержащий и конструктор, и метод PrintRecord.
Когда использовать частичные классы
- Крупные проекты с несколькими разработчиками: каждый участник команды может редактировать отдельный файл без конфликтов.
- Автогенерируемый код: IDE часто создают файлы, которые не должны редактироваться вручную; частичные классы позволяют добавлять пользовательскую логику без изменения сгенерированного кода.
Ключевые моменты
- Ключевое слово
partialдолжно присутствовать в каждом файле, вносящем вклад в класс. - Все части должны находиться в одном пространстве имен и компилироваться вместе.
- Все части должны иметь одинаковый модификатор доступа (например,
public,internal). - Если какая-либо часть объявляет класс как
abstractилиsealed, весь класс наследует этот атрибут. - Все члены, определенные в любой части, видны всем другим частям.
- Модификатор
partialне разрешен для делегатов или перечислений.
Что такое частичный метод?
Частичный метод — специальный вид метода, который может быть объявлен в одной части частичного класса и опционально реализован в другой. Если реализация опущена, и объявление метода, и любые вызовы его удаляются на этапе компиляции, что может повысить производительность.
Пример 2 – Использование частичных методов
В file1.cs класс Car объявляет частичный метод и другие обычные методы.
public partial class Car {
partial void InitializeCar();
public void BuildRim() { }
public void BuildWheels() { }
}
В file2.cs тот же класс Car предоставляет реализацию для InitializeCar и добавляет еще один метод.
public partial class Car {
public void BuildEngine() { }
partial void InitializeCar() {
string str = "Car";
}
}
Объявление частичного метода состоит из двух частей: сигнатуры в одном файле и опциональной реализации в том же или другом файле.
Правила для частичных методов
- Должны быть объявлены с ключевым словом
partial. - Тип возвращаемого значения всегда
void(нет возвращаемого значения). - Неявно
private; не могут бытьpublic,protectedилиinternal. - Не могут быть объявлены
virtual,overrideилиabstract. - Если реализация не предоставлена, компилятор удаляет метод и любые вызовы к нему.
Язык C
- Классы и объекты в C#: Фундаменты надёжного ООП
- Абстрактные классы и методы в C#: практическое руководство
- Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
- Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
- Дружественные функции и классы в C++: мастерство контроля доступа
- Java: объекты, классы и основные концепции ООП
- Наследование в C#: базовые и производные классы, интерфейсы
- Полиморфизм в C#: статический и динамический, перегрузка и переопределение
- ASTM A729 Class A: Свойства дважды нормализованной и отпущенной стали
- ASTM A649 Class 2: Спецификации нормализованной и отпущенной конструкционной стали