Любое время, с которым Вы делаете вычисления, удваивается, это может произойти. Этот код дал бы Вам 877.85:
двойной ответ = Math.round (dCommission * 100000) / 100000.0;
Теперь попробуйте в режиме выпуска, вне отладчика ;-p
Я получаю разные результаты с / без отладчика. Отладчик нарушает множество тонких нюансов / оптимизаций, поэтому я могу только догадываться, что это один из тех случаев, когда отладчик имеет значение. Что еще больше усложняет отладку ;-p
Я думаю, что foo bar будет напечатан. Конструктор статического типа будет сначала выполнен в Foo, затем будет вызываться метод Init для класса Bar. Я не знаю, может ли поведение измениться или нет. Это интересно.
Просто взглянув на него, я был бы удивлен, если бы он отобразил что-нибудь еще, кроме «FooBar».
По той простой причине, что вы сначала обращаетесь к Foo, поэтому его статический конструктор будет запущен. За ним следует инициализатор статического поля при создании экземпляра Bar.
Рад быть исправленным.
Это обсуждается на странице ответов Джона . Я не специалист по C #, но похоже, что у системы есть ровно один выбор, когда вызывать статический код foo
(и, следовательно, писать «Foo»), но у нее есть практически неограниченная свобода выбора, когда инициализировать Bar.i
(который будет писать «Бар»), поэтому это может произойти либо при загрузке класса, либо при его первом использовании, либо вообще не происходить.
Он печатает Foo, Bar в режиме отладки и Bar, Foo в режиме Release. Итак, что происходит, так это то, что код выпуска оптимизирован, и в результате оптимизации сначала вызывается Bar - но нет гарантии, что так будет всегда.