Re[5]: [C#, Этюд] Unassigned variable
От: Muxa  
Дата: 22.03.10 14:16
Оценка:
Error    1    Program does not contain a static 'Main' method suitable for an entry point
Re[3]: [C#, Этюд] Unassigned variable
От: Muxa  
Дата: 22.03.10 14:23
Оценка:
N>Верно! Другой вариант — partial метод без имплементации.

о, а чо происходит-то в данном случае?
насколько я понял решение выгдядит так:
partial class X {
    static void Main() {
        X x; // *
        x.Foo(); // **
    }

    partial void Foo();
}

компилируется и даже не падает (дефолтные настройки).
пробовал дебажить, строки * и ** дебагер проскакивает, даже брейкопоинт на них не срабавывает?
Re[4]: [C#, Этюд] Unassigned variable
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 14:26
Оценка:
Здравствуйте, 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.

Re[5]: [C#, Этюд] Unassigned variable
От: Niswn  
Дата: 22.03.10 14:52
Оценка:
Здравствуйте, 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 он это вычислит сам.
ICQ: 326084932
Re[6]: [C#, Этюд] Unassigned variable
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.03.10 14:56
Оценка:
Здравствуйте, Niswn, Вы писали:

N>Тогда непонятно почему вы "забраковали" решение divergo. В вашем варианте тоже нельзя сказать, что метод существует, так как он просто игнорируется компилятором.

По условию Main — это метод.
В варианте ksg71 Main — это метод, в варианте divergo — это не метод, а часть skipped-section.
Re[7]: [C#, Этюд] Unassigned variable
От: vdimas Россия  
Дата: 23.03.10 02:15
Оценка:
Здравствуйте, nikov, Вы писали:

N>В варианте ksg71 Main — это метод, в варианте divergo — это не метод, а часть skipped-section.


Внутри main можно было директивы препроцессора нарисовать.
Re[8]: [C#, Этюд] Unassigned variable
От: _FRED_ Черногория
Дата: 23.03.10 05:54
Оценка:
Здравствуйте, vdimas, Вы писали:

N>>В варианте ksg71 Main — это метод, в варианте divergo — это не метод, а часть skipped-section.


V>Внутри main можно было директивы препроцессора нарисовать.


Тогда было бы нарушение условия. Смотри стартовое сообщение
Help will always be given at Hogwarts to those who ask for it.
Re[5]: [C#, Этюд] Unassigned variable
От: AngeL B. Россия  
Дата: 23.03.10 10:15
Оценка:
Здравствуйте, nikov, Вы писали:

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.


вот, знаете, дело тут не в спеке, а в том в каком порядке эта спека применяется. Мне искренне непонятно, чего ради _сперва_ удаляются вызовы и только потом проверяется инициализированность переменной.
Мы приходим к каким-то странным ошибкам, типа я написал тело partial-метод, а получил ошибку "переменная не инициализированна". Очень логично
Re[6]: [C#, Этюд] Unassigned variable
От: nikov США http://www.linkedin.com/in/nikov
Дата: 23.03.10 10:31
Оценка: 2 (1)
Здравствуйте, AngeL B., Вы писали:

AB>вот, знаете, дело тут не в спеке, а в том в каком порядке эта спека применяется. Мне искренне непонятно, чего ради _сперва_ удаляются вызовы и только потом проверяется инициализированность переменной.


Представь, что это происходило бы в другом порядке: сначала проверяем, что все переменные инициализированы перед обращением, а потом удаляем вызовы partial и conditional методов. Тогда в следующем коде нам удалось бы обратиться к неинициализированной переменной.

partial class C
{
    static partial void Foo(int x);
    static void Main()
    {
        int x;
        Foo(x = 1);
        x.ToString();
    }
}


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