Разделяемые классы и методы в C#
В этой статье вы узнаете о разделяемых классах и методах C# и научитесь их грамотно использовать.
Существует много ситуаций, когда вам может понадобиться разделить определение класса. Допустим, вы работаете над большим проектом, в котором задействовано множество разработчиков и программистов — всем нужно работать над одним классом одновременно. В таких случаях нам будут полезны разделяемые классы.
Разделяемые классы
В языке C# можно разделить определение класса между двумя или более исходными файлами. Каждый файл с исходным кодом содержит часть определения класса, а во время компиляции все части объединяются. Чтобы разделить определение класса, нужно использовать ключевое слово partial
.
Пример 1. Выводим высоту и ширину
Мы напишем новый проект — HeightWeightInfo
. Результат его работы — вывод в консоль высоты и ширины.
Внутри проекта содержится файл File1.cs
с разделенным классом Record
. В нем определены две целочисленные переменные — h
и w
. Также внутри реализован метод/конструктор Record
, который присваивает значения переменным h
и w
.
namespace HeightWeightInfo
{
class File1
{
}
public partial class Record
{
private int h;
private int w;
public Record(int h, int w)
{
this.h = h;
this.w = w;
}
}
}
Во втором файле File2.cs
содержится точно такой же класс Record
. Внутри него содержится лишь один метод — PrintRecord
. Этот метод выводит в консоль значения переменных h
и w
.
namespace HeightWeightInfo
{
class File2
{
}
public partial class Record
{
public void PrintRecord()
{
Console.WriteLine("Высота:"+ h);
Console.WriteLine("Ширина:"+ w);
}
}
}
В проекте метод main
выглядит следующим образом:
namespace HeightWeightInfo
{
class Program
{
static void Main(string[] args)
{
Record myRecord = new Record(10, 15);
myRecord.PrintRecord();
Console.ReadLine();
}
}
}
В нем мы можем увидеть объект класса Record — myRecord
. В качестве параметров поступают значения h
и w
, определенные в File1.cs
— 10 и 15 соответственно.
Метод PrintRecord
вызывается объектом myRecord
, который объявлен в File2.cs
.
Как видите, ключевое слово keyword
помогает объединить атрибуты класса, объявленного в разных файлах, в один класс.
Когда partial
класс может быть полезен:
- Вы работаете с большим проектом, в котором задействовано более одного разработчика. С помощью класса
partial
вы можете вместе работать с одним классом. - Класс можно дополнять или редактировать без повторного создания исходного файла, которые автоматически генерируются IDE.
Что нужно запомнить о partial-классах
Ключевое слово partial
указывает на то, что другие части класса могут объявлены в пространстве имен. Если мы хотим создать partial-класс, то необходимо использование ключевого слова partial
. Все части класса должны быть принадлежать одному пространству имен и доступны во время компиляции в финальный тип. У всех переменных должен быть один и тот же модификатор доступа — например, private
, public
и т. д.
- Если какая-либо часть класса объявлена как
abstract
, то и финальный тип также считаетсяabstract
. - Если какая-либо часть класса объявлена как
sealed
, то и финальный тип также считаетсяsealed
. - Если в какой-либо части класса объявлен базовый класс, то финальный тип наследует этот класс.
- Любой член класса, объявленный в partial-классе, доступен остальным частям класса.
- Все части partial-класса должны содержаться в одном и том же пространстве имен.
Примечание. Модификатор
partial
недоступен в объявлениях делегатов и перечислений.
Разделяемые методы
Внутри partial-классов могут содержатся partial-методы. Одна из частей класса содержит сигнатуру метода, остальная часть его реализации может содержаться в той же части класса или другой. Если реализация не предоставлена, то метод и все его вызовы удаляются во время компиляции.
Пример 3. Рассматривает методы partial-класса Car
В качестве примера возьмем partial-класс Car
, объявленный в File1.cs
. В нем содержится три метода: InitializeCar()
, BuildRim()
и BuildWheels()
. Среди них объявлен partial-класс InitializeCar
.
public partial class Car
{
partial void InitializeCar();
public void BuildRim() { }
public void BuildWheels() { }
}
Также в нашем проекте есть файл file2.cs
. В нем содержится два метода: BuildEngine
и InitializeCar
. Метод Initialize
— partial-метод, который был определен еще в file1.cs
.
Реализация partial-метода разделена на две части:
- Объявление в файле
file1.cs
. - Реализация в файле
file2.cs
.
Реализовать partial-метод можно и в одном, и в разных файлах.
Что нужно запомнить о partial-методах
- Ключевое слово
partial
. - Тип возвращаемого значения должен быть
void
. - Partial-методы имеют неявный тип
private
. - Следовательно, они не могут иметь тип
virtual
.