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

    +121

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    public class MainSetting
      {
        // ...
        public void Load(out MainSetting objectToDeserialise) {...}
        // ...
      }

    Использвоание: _mainSetting.Load(out _mainSetting);

    Запостил: ziaw, 15 Ноября 2011

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

    • Чё, какие то проблемы?
      Ответить
    • Класс "так и так" передается по ссылке.
      Ответить
      • +1
        Надо знать принципы ООП и поведения структурных типов и ссылочных типов.
        А это говнокод. На худой конец можно сделать статический метод.

        var setting = MainSetting.CreateInstance();
        или делается синглтон.
        Ответить
        • out здесь нужен, иначе сначала придется сконструировать объект и передать в параметр objectToDeserialise.
          Ответить
          • http://ideone.com/IwkiS
            Ответить
            • Хрень! Вот правильный подход

              public class MainSetting {
              private MainSetting() { }
              Int32 kokoko;
              // Можно добавить параметры из которых будет строится объект
              public static MainSetting Load() {
              var objectToDeserialise = new MainSetting();
              objectToDeserialise.kokoko = 1;
              return objectToDeserialise;
              }
              }

              // А использование аут параметра в методе экземпляра для создания объекта это тупизм.
              Ответить
              • ты думашь, я показывал правильный вариант?
                конечно нет.
                я лишь показывал, что без out в данном конкретном говнокодистом случае не хорошо.
                твой вариант, тоже хреновенький.
                Ответить
          • Щто?
            Ответить
    • Я понял. Говно в использовании:
      _mainSetting.Load(out _mainSetting);
      Нужно сначала создать класс, чтобы его потом десериализовать из потока.
      Ответить
    • Как верно отметили, нужно сначала создать объект, чтобы потом получить новый экземпляр десериализацией.

      В коде, до момента десериализации объект никак не используется.

      Помимо этого в методе захардкожен путь к файлу и инициализация дефолтными значениями при любом исключении:

      catch (Exception /*FileNotFoundException*/) но это уже не так интересно.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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