1. C# / Говнокод #3137

    +121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    [SecuritySafeCritical]
    public ObjectHandle CreateInstance(string assemblyName, string typeName)
    {
        if (this == null) // WTF?
        {
            throw new NullReferenceException();
        }
        if (assemblyName == null)
        {
            throw new ArgumentNullException("assemblyName");
        }
        return Activator.CreateInstance(assemblyName, typeName);
    }

    mscorlib 4.0
    System.AppDomain

    Запостил: alexeykuptsov, 30 Апреля 2010

    Комментарии (11) RSS

    • if (this == null) // WTF?

      а что смутило? такая проверка делается в расширениях методов
      Ответить
      • Ну все же это не extension method (надеюсь, я правильно понял понятие "расширение метода"). Мне кажется, что this всегда ненулевой. Или я что-то упускаю?
        Ответить
        • >это не extension method
          да, просто уже забыл что там this перед параметром пишется
          >this всегда ненулевой
          это же микросовт - можно всего ожидать =(
          Ответить
          • Черт. Это был не говнокод. This действительно может быть нулевым. Это оговорено в спецификации и добиться этого можно с помощью IL-команды call вместо callvirt.
            Тут подробнее: http://www.rsdn.ru/forum/dotnet/2964601.flat.aspx
            Ответить
            • Ну это IL.

              А приведённое - реальный исходник на C# или декомпилено рефлектором?
              Ответить
              • Рефлектор
                Ответить
              • А, декомпилено скорей всего.
                Реальные исходники используют java-стайл.

                Ну что ж, давайте теперь искать:
                if(this == null) {
                   try { }
                   finally { /* ... а я не говнокодер...  лалалала ... */ }
                }


                :D
                Ответить
            • Я даже больше того скажу - в Visual Basic .NET допустима такая конструкция

              class A {public int B(){return 1;}}

              A inst = Nothing

              inst.B()

              Вернет 1. В C# вернет NullReferenceException
              Ответить
              • Оп, спасибо, не знал. Теперь понятно, откуда ноги растут у этого пункта в спецификации.
                Ответить
    • Кстати, ник alexeykuptsov'а только у меня одного перекосило?
      Ответить
    • Такого шарписька спасёт С++.
      Ответить

    Добавить комментарий