Skip to main content

C# vs Java. Partial class and method

· 3 min read
Andrey Ganyushkin

Начнем с классов. Ну и с того, что в Java возможности подобной "Partial Classes and Methods" нет.

О чем это?

Partial Classes and Methods - это возможность для разработчика разделить реализацию класс на два или более файла

Из документации

  • When working on large projects, spreading a class over separate files enables multiple programmers to work on it at the same time.
  • When working with automatically generated source, code can be added to the class without having to recreate the source file. Visual Studio uses this approach when it creates Windows Forms, Web service wrapper code, and so on. You can create code that uses these classes without having to modify the file created by Visual Studio.
  • When using source generators to generate additional functionality in a class.

и тут все довольно понятно, мы просто берём и создаём два или более класса, можно в разных файлах, с одинаковым именем и можем рассматривать это как один большой класс.

Не уверен, что "When working on large projects, spreading a class over separate files" - это действительно тот путь по которому нужно идти.

А вот второй и третий пункты - звучат убедительно и действительно, это может быть полезным разделить код который мы пишем и код который нам что-то или кто-то нагенерировал.

Partial Classes

Для того чтобы определить Partial Class нужно использовать ключевое слово partial

// in GeneratedPlant.cs
public partial class Plant
{
public int Id;
public string LatName;
}

// in Plant.cs
public partial class Plant
{
public string RuName;
}

такой код мы можем расценивать как

public class Plant
{
public int Id;
public string LatName;
public string RuName;
}

класса, структуры или интерфейса могут быть разбиты на части с помощью ключевого слова partial

Дополнительные модификаторы распространяются на все части определения даже если указаны только в одной части.

Все интерфейсы, базовые классы, атрибуты будут объеденены в результирующей, скомпилированной версии разделенной сущьности.

Partial Methods

Разделяемый метод - это что-то такое:

// Definition in file1.cs
partial void BuildPlant();

// Implementation in file2.cs
partial void BuildPlant()
{
// method body
}

Partial Methods - это метод у которого мы можем определить сигнатуру в одном месте и реализовать этот метод в другом (все как в C++).

Реализация для разделяемого метода может отсутствовать если:

из документации

  • It doesn't have any accessibility modifiers (including the default private).
  • It returns void.
  • It doesn't have any out parameters.
  • It doesn't have any of the following modifiers virtual, override, sealed, new, or extern.

Conclusion

На этом все. Фича скорее для устранения пересечений между результатами кодогенерации и кодом разработчика.