Denis Gladkikh

outcoldman

My personal blog about software development

  • 03 Jul 2012
  • C#, Example, Простые задачи

Итак, пару дней назад я опубликовал очень простую задачу, смысл который заключался в том, чтобы определить проблему вот этого кода:

Как я и ожидал – правильные ответы нашлись. Не знаю, что толкает людей делать статические поля, а еще хуже - инициализацию в статических методах. Неужели мало примеров о том, что это плохо? В общем, очевидных проблем нашлось тут много: поток никто не закрывает (на самом деле это был мой запланированный отвлекающий маневр, хотя смысла в нем, наверное, нет). Кто-то просто сказал, что хорошо было бы проверки вставить, чтобы не получить NullReferenceException – полностью согласен.

Но самая большая проблема этого кода (да и вообще всех статических конструкторов и инициализаций статических переменных), что никто не будет ожидать, что метод IsObsolete может бросить NullReferenceException. И правильно сказали в комментариях, если код их метода GetLegacyStatements выдаст исключение, то класс не будет проиницилизирован должным образом, и переменная ApplicationObsoleteStatements будет равен null. Как такого можно достичь? Кто-нибудь что-нибудь поменяет, этот метод не будет убивать AppDomain, да и использоваться этот код будет редко – вот и будет результат.

Have a question? Want to follow up? Send a comment? Or just ask for help or consultation? Send me an email at public[at]denis[dot]gladkikh[one more dot]email.