S>Вопрос, а как определяется порядок компиляции partial методов? Из какого partial метода код
S>раньше\позже? Я это понимаю так, что в конце все partial методы превращаются в один метод, не partial.
Если я правильно понял вопрос, то речь о чем-то таком?
// MyClass.cs
public partial class MyClass
{
public void Action()
{
BeforeAction();
}
partial void BeforeAction();
}
// MyClass.Partial1.cs
public partial class MyClass
{
partial void BeforeAction()
{
Console.WriteLine("First");
}
}
// MyClass.Partial2.cs
public partial class MyClass
{
partial void BeforeAction()
{
Console.WriteLine("Second");
}
}
Это не скомпилируется. Будет ошибка: "A partial method may not have multiple defining declarations"
S>Как это происходит?
Очень просто. Сводим все partial-файлы для типа в один, заменяя partial definition на partial declaration.
И, кстати, в отличие от virtual/override, partial работает только в рамках текущей сборки (текущего проекта).