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

Последнее обновление: 04.09.2021

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

Например, определим в проекте два файла с кодом. Не столь важно как эти файлы будут называться. Например, 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");
	}
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850