Разделяемые классы и методы в 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 класс может быть полезен: 

  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

public partial class Car
{
    partial void InitializeCar();
    public void BuildRim() { }
    public void BuildWheels() { }
}

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

Реализация partial-метода разделена на две части: 

  1. Объявление в файле file1.cs.
  2. Реализация в файле file2.cs.

Реализовать partial-метод можно и в одном, и в разных файлах.

Что нужно запомнить о partial-методах

  • Ключевое слово partial.
  • Тип возвращаемого значения должен быть void.
  • Partial-методы имеют неявный тип private.
  • Следовательно, они не могут иметь тип virtual.
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©