Здравствуйте, Muxa, Вы писали:
M>о, а чо происходит-то в данном случае?
Происходит то, что в спеке написано:
10.2.7 Partial methods
...
If no part of a partial type declaration contains an implementing declaration for a given partial method, any expression statement invoking it is simply removed from the combined type declaration. Thus the invocation expression, including any constituent expressions, has no effect at run-time.
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Muxa, Вы писали:
M>>о, а чо происходит-то в данном случае?
N>Происходит то, что в спеке написано:
N>
N>10.2.7 Partial methods
N>...
N>If no part of a partial type declaration contains an implementing declaration for a given partial method, any expression statement invoking it is simply removed from the combined type declaration. Thus the invocation expression, including any constituent expressions, has no effect at run-time.
Тогда непонятно почему вы "забраковали" решение divergo. В вашем варианте тоже нельзя сказать, что метод существует, так как он просто игнорируется компилятором. Просто в случае с #if мы явно говорим проигнорироваить код, а в случае partial method он это вычислит сам.
Здравствуйте, Niswn, Вы писали:
N>Тогда непонятно почему вы "забраковали" решение divergo. В вашем варианте тоже нельзя сказать, что метод существует, так как он просто игнорируется компилятором.
По условию Main — это метод.
В варианте ksg71 Main — это метод, в варианте divergo — это не метод, а часть skipped-section.
Здравствуйте, vdimas, Вы писали:
N>>В варианте ksg71 Main — это метод, в варианте divergo — это не метод, а часть skipped-section.
V>Внутри main можно было директивы препроцессора нарисовать.
Тогда было бы нарушение условия. Смотри стартовое сообщение
Help will always be given at Hogwarts to those who ask for it.
N>10.2.7 Partial methods
N>...
N>If no part of a partial type declaration contains an implementing declaration for a given partial method, any expression statement invoking it is simply removed from the combined type declaration. Thus the invocation expression, including any constituent expressions, has no effect at run-time.
вот, знаете, дело тут не в спеке, а в том в каком порядке эта спека применяется. Мне искренне непонятно, чего ради _сперва_ удаляются вызовы и только потом проверяется инициализированность переменной.
Мы приходим к каким-то странным ошибкам, типа я написал тело partial-метод, а получил ошибку "переменная не инициализированна". Очень логично
Здравствуйте, AngeL B., Вы писали:
AB>вот, знаете, дело тут не в спеке, а в том в каком порядке эта спека применяется. Мне искренне непонятно, чего ради _сперва_ удаляются вызовы и только потом проверяется инициализированность переменной.
Представь, что это происходило бы в другом порядке: сначала проверяем, что все переменные инициализированы перед обращением, а потом удаляем вызовы partial и conditional методов. Тогда в следующем коде нам удалось бы обратиться к неинициализированной переменной.
partial class C
{
static partial void Foo(int x);
static void Main()
{
int x;
Foo(x = 1);
x.ToString();
}
}
Но, пожалуй, ты прав, что в спецификации стоило бы яснее прописать порядок применения этих правил.