Частичные классы и методы
Классы могут быть частичными. То есть мы можем иметь несколько файлов с определением одного и того же класса, и при компиляции все эти определения будут скомпилированы в одно.
Например, определим в проекте два файла с кодом. Не столь важно как эти файлы будут называться. Например, PersonBase.cs и PersonAdditional.cs. В одном из этих файлов (без разницы в каком именно) определим следующий класс:
public partial class Person
{
public void Move()
{
Console.WriteLine("I am moving");
}
}
А в другом файле определим следующий класс:
public partial class Person
{
public void Eat()
{
Console.WriteLine("I am eating");
}
}
Таким образом, два файла в проекте содержит определение одного и того же класса Person, которые содержат два разных метода. И оба определенных здесь класса являются частичными. Для этого они определяются с ключевым словом partial.
Partial classes in C#
Затем мы можем использовать все методы класса Person:
class Program
{
static void Main(string[] args)
{
Person tom = new Person();
tom.Move();
tom.Eat();
Console.ReadKey();
}
}
Частичные методы
Частичные классы могут содержать частичные методы. Такие методы также опреляются с ключевым словом partial. Причем определение частичного метода без тела метода находится в одном частичном классе, а реализация этого же метода - в другом частичном классе.
Например, изменим выше определенные классы Person. Первый класс:
public partial class Person
{
partial void Read();
public void DoSomething()
{
Read();
}
}
Второй класс:
public partial class Person
{
partial void Read()
{
Console.WriteLine("I am reading a book");
}
}
В первом классе определен метод Read(). Причем на момент определения первого класса неизвестно, что представляет собой этот метод, какие действия он будет выполнять. Тем не менее мы знаем список его параметров и можем вызвать в первом классе.
Второй класс уже непосредственно определяет тело метода Read().
class Program
{
static void Main(string[] args)
{
Person tom = new Person();
tom.DoSomething();
}
}
Стоит отметить, что по умолчанию к частичным методам применяется ряд ограничений:
Они не могут иметь модификаторы доступа
Они имеют тип void
Они не могут иметь out-параметры
Они не могут иметь модификаторы virtual, override, sealed, new или extern
Если же они не соответствуют какому-то из этих ограничений, то для них должна быть предоставлена реализация. Как, например, в следующем примере частичные методы применяют модификатор public:
// первая реализация класса и его методов
public partial class Person
{
public partial void Read();
public void DoSomething()
{
Read();
}
}
// вторая реализация класса и его методов
public partial class Person
{
public partial void Read()
{
Console.WriteLine("I am reading a book");
}
}