Partial class c что это
Перейти к содержимому

Partial class c что это

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

В C# может использоваться такая возможность как разделяемые классы и методы. Суть разделяемого класса (или, как его ещё называют, частичного класса) состоит в том, что несколько частей одного и того же класса могут располагаться в разных файлах, но при компиляции все эти части будут собраны воедино. Рассмотрим основные моменты, связанные с использованием разделяемых классов и методов в C#.

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

Для определения разделяемого класса используется ключевое слово partial , которое должно находиться непосредственно перед словом class . Например, создадим новое консольное приложение и добавим в него два файла со следующим содержимым:

Файл PartialClass_part1.cs:

Файл PartialClass_part2.cs:

В Visual Studio структура проекта будет выглядеть следующим образом:

Таким образом, мы объявили разделяемый класс с двумя методами. Теперь мы можем использовать этот класс, например, в методе Main следующим образом:

В консоли будет следующим вывод:

В каких случаях может потребоваться разделяемый класс

Microsoft выделяет следующие три варианта, когда может потребоваться использование разделяемых классов:

  1. При работе над большими проектами. Распределение класса между различными файлами позволяет нескольким программистам работать с ним одновременно.
  2. При работе с использованием автоматически создаваемого источника код можно добавлять в класс без повторного создания файла источника. Например, в Visual Studio этот подход используется при создании форм Windows Forms.
  3. При использовании генераторов источников для создания дополнительных функциональных возможностей в классе.

При этом следует отметить несколько моментов, связанных с использованием распределенных классов в C#:

  1. все части разделяемого класса должны использовать ключевое слово partial .
  2. для формирования окончательного типа все части класса должны быть доступны во время компиляции.
  3. все части должны иметь одинаковые модификаторы доступа, например public , private и т. д.
  4. если какая-либо из частей объявлена абстрактной ( abstract ), то весь тип будет считаться абстрактным.
  5. если какая-либо из частей объявлена запечатанной ( sealed ), то весь тип будет считаться запечатанным.
  6. если какая-либо из частей объявляет базовый тип, то весь тип будет наследовать данный класс.

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

Суть разделяемого метода практически аналогична — в одной части разделяемого класса мы объявляем сигнатуру метода, а в другой части разделяемого класса — тело. Как и в случае с разделяемым классом, разделяемый метод должен начинаться с ключевого слова patrial . Например, создадим в нашем разделяемом классе разделяемый метод:

Файл PartialClass_part1.cs:

Файл PartialClass_part2.cs:

Теперь мы можем вызвать разделяемый метод в нашей программе:

Разделяемый метод в C# может не содержать реализации (тело метода). В этом случае метод и все вызовы метода удаляются во время компиляции. При этом, стоит отметить, что отсутствие реализации допускается только для следующих разделяемых методов:

  • у него нет модификаторов доступа (включая private по умолчанию).
  • он возвращает значение void .
  • у него нет параметров out .
  • у него нет ни одного из следующих модификаторов: virtual , override , sealed , new или extern .

Итого

Сегодня мы в общих чертах изучили, что из себя представляют разделяемые (частичные) классы и методы в C#. Разделяемые классы и методы могут содержаться в нескольких файлах и при компиляции собираться воедино.

Partial class c что это

Классы могут быть частичными. То есть мы можем иметь несколько файлов с определением одного и того же класса, и при компиляции все эти определения будут скомпилированы в одно.

Например, определим в проекте два файла с кодом. Не столь важно как эти файлы будут называться. Например, PersonBase.cs и PersonAdditional.cs. В одном из этих файлов (без разницы в каком именно) определим следующий класс:

А в другом файле определим следующий класс:

Таким образом, два файла в проекте содержит определение одного и того же класса Person, которые содержат два разных метода. И оба определенных здесь класса являются частичными. Для этого они определяются с ключевым словом partial .

Partial classes in C#

Затем мы можем использовать все методы класса Person:

Частичные методы

Частичные классы могут содержать частичные методы. Такие методы также опреляются с ключевым словом partial . Причем определение частичного метода без тела метода находится в одном частичном классе, а реализация этого же метода — в другом частичном классе.

Например, изменим выше определенные классы Person. Первый класс:

В первом классе определен метод Read() . Причем на момент определения первого класса неизвестно, что представляет собой этот метод, какие действия он будет выполнять. Тем не менее мы знаем список его параметров и можем вызвать в первом классе.

Второй класс уже непосредственно определяет тело метода Read() .

Стоит отметить, что по умолчанию к частичным методам применяется ряд ограничений:

Они не могут иметь модификаторы доступа

Они имеют тип void

Они не могут иметь out-параметры

Они не могут иметь модификаторы virtual, override, sealed, new или extern

Если же они не соответствуют какому-то из этих ограничений, то для них должна быть предоставлена реализация. Как, например, в следующем примере частичные методы применяют модификатор public :

Разделяемые классы и методы в C#

Существует много ситуаций, когда вам может понадобиться разделить определение класса. Допустим, вы работаете над большим проектом, в котором задействовано множество разработчиков и программистов — всем нужно работать над одним классом одновременно. В таких случаях нам будут полезны разделяемые классы.

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

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

Пример 1. Выводим высоту и ширину

Мы напишем новый проект — HeightWeightInfo . Результат его работы — вывод в консоль высоты и ширины.

Внутри проекта содержится файл File1.cs с разделенным классом Record . В нем определены две целочисленные переменные — h и w . Также внутри реализован метод/конструктор Record , который присваивает значения переменным h и w .

Во втором файле File2.cs содержится точно такой же класс Record . Внутри него содержится лишь один метод — PrintRecord . Этот метод выводит в консоль значения переменных h и w .

В проекте метод main выглядит следующим образом:

В нем мы можем увидеть объект класса Record — myRecord . В качестве параметров поступают значения h и w , определенные в File1.cs — 10 и 15 соответственно.

Метод PrintRecord вызывается объектом myRecord , который объявлен в File2.cs .

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

Когда partial класс может быть полезен:

  1. Вы работаете с большим проектом, в котором задействовано более одного разработчика. С помощью класса partial вы можете вместе работать с одним классом.
  2. Класс можно дополнять или редактировать без повторного создания исходного файла, которые автоматически генерируются 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 .

Также в нашем проекте есть файл file2.cs . В нем содержится два метода: BuildEngine и InitializeCar . Метод Initialize — partial-метод, который был определен еще в file1.cs .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *