признаю, вы правы
в этом месте мсдн противоречит спецификации ECMA, и в теории приоритет следует отдать стандарту (хотя для практических целей я бы основывался на теории, у Липперта в блоге есть примеры, когда реализация сознательно противоречит спецификации)
специально для вас сформулирую иначе:
в классе С есть поле:
public static A a = new A();
конструктор А выглядит таким образом:
public A() { Console.WriteLine(«from initializer of static field»); }
вывести эту строку между «before» и «after», как и раньше
статического конструктора в классе С нет (beforefieldinit есть)
класс A приватно определен в классе С (извне недоступен)
да, с синхронизацией у меня не получилось сделать пример, как раз из-за проблем с потоками
делал через ManualResetEvent, который жду в инициализаторе статического поля класса C, и сигналю между двумя Console.WriteLine
но похожое, инициализация типа проходит в том же потоке, и все просто виснет
если получится сделать внятный примем — буду благодарен
про мьютекс интересно
указанный мной статический конструктор менять нельзя по условию, но можно добавить инициализатор поля, который будет делать то, что нужно
правда, не знаю, как там будет с потоками в таком случае, не проверял
да, такой код скорее всего будет работыть, как и было указано
проблема в том, что С# не гарантирует вызов статического конструктора _при_ первом использовании, а только _до_ первого использования
конечно, покупают не программисты, но кто-то же должен сказать, что именно купить
допустим, программисту сказали: внедряем статический анализ, выбери тулзу для этого, скачай и проверь штук 5 разных, а он даже (утрирую) не смог скачать, то будет ли принято решение о покупке?
по моему опыту, человек, который знает, что такое статический анализатор с/с++ кода для 64битных приложений, скорее постарается избежать общения (даже посредством емейла), если есть возможность просто скачать
в этом месте мсдн противоречит спецификации ECMA, и в теории приоритет следует отдать стандарту (хотя для практических целей я бы основывался на теории, у Липперта в блоге есть примеры, когда реализация сознательно противоречит спецификации)
специально для вас сформулирую иначе:
в классе С есть поле:
public static A a = new A();
конструктор А выглядит таким образом:
public A() { Console.WriteLine(«from initializer of static field»); }
вывести эту строку между «before» и «after», как и раньше
статического конструктора в классе С нет (beforefieldinit есть)
класс A приватно определен в классе С (извне недоступен)
тип С известен заранее, а значит, может создаться где угодно
делал через ManualResetEvent, который жду в инициализаторе статического поля класса C, и сигналю между двумя Console.WriteLine
но похожое, инициализация типа проходит в том же потоке, и все просто виснет
если получится сделать внятный примем — буду благодарен
указанный мной статический конструктор менять нельзя по условию, но можно добавить инициализатор поля, который будет делать то, что нужно
правда, не знаю, как там будет с потоками в таком случае, не проверял
про отдельную сборку смотрите ответ
habrahabr.ru/blogs/net/113543/#comment_3649608
т.е. направление близкое, но решение у меня другое
ну тем и интересней решения получаются, о половине случаев я вообще не думал
в моем решении искомый вызов является первым
я не указал, что «Before static .ctor» вызывается из Main (у меня), поэтому ваше решение проходит
проблема в том, что С# не гарантирует вызов статического конструктора _при_ первом использовании, а только _до_ первого использования
только непонятно, на что жалуетесь тогда )
допустим, программисту сказали: внедряем статический анализ, выбери тулзу для этого, скачай и проверь штук 5 разных, а он даже (утрирую) не смог скачать, то будет ли принято решение о покупке?
тем более фрилансеры Вам в помощь
юзабилити действительно ужас
я был в шаге от того, чтобы звонить спрашивать «как скачать» )