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

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    protected override Type GetEntryType()
    {
        return typeof(ReportEntry);
    }

    Код из реального проекта

    Запостил: UniXoiD, 21 Января 2013

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

    • Не на столько я постиг C#. В чём суть говна?
      Ответить
    • возможно TC имел ввиду, что можно ограничиться GetType()? Если же имелся ввиду не тип инстанса, то суть говна непонятна.
      Ответить
      • Так override же.
        Ответить
        • видимо есть иерархия классов и для каждого нового класса T метод перегружается в виде:
          protected override Type GetEntryType()
          {
              return typeof(T);
          }
          , что в данном случае равносильно библиотечному вызову GetType()
          Ответить
          • А вот хз, может это рукописный маппер, и этот метод возвращает тип объектов, которые он умеет маппить... Без контекста ничего не ясно.
            Ответить
            • т.е. для базового класса это, скажем int, а для текущего ReportEntry? не понятно зачем тут тогда наследование.
              Ответить
              • базовый класс может быть абстрактным и не уметь мапить ничего. А потомки уже реализуют конкретные типы.
                Ответить
                • если базовый абстрактный класс мапера ничего не мапит, сделать дженерик и убрать наследование нах.
                  Ответить
                  • Иногда есть интерфейс, который уже нельзя менять и надо просто реализовать.
                    Вот в первом шарпе не было женериков, например.
                    Ответить
                    • судя по нику автора, код вообще под Mono
                      Ответить
                      • Ну кто знает, может он дома (или на прошлой работе) юниксоид, а пишет в вижуалстудии под .нету фрейморка.

                        P.S. Кстати как там у монодевелопа сейчас со стабильностью? В прошлый раз, когда я его поставил, и хотел немного позаниматься шарпом, он крашился в рандомные моменты. После этого я во второй (и наверное последний) раз в жизни забил на шарп и его изучение.
                        Ответить
                        • Ещё и само моно тоже стабильностью не обладает. У меня несколько раз были сегфолты
                          Ответить
                          • Ну вот и зачем оно такое надо?
                            JVM надежная, проверенная временем и довольно быстрая . А шарп - это кроссплафторменность только в рамках вендоплатформы и хорошая работа в связке мс-продуктами.

                            > забил на шарп и его изучение
                            Правильно, надо прислушиваться к дяде Столлману. Он хуйни не посоветует.
                            Ответить
                            • показать все, что скрытоВообще то, о джаве этот бомж не лучшего мнения.
                              Ответить
                              • http://www.gnu.org/philosophy/java-trap.en.html
                                Thus, the Java language as such is no longer a trap.
                                А посему отныне пользоваться жабой позволяется не только трапам.

                                Жду цитаты где он лучшего мнения о C#, то бишь рекомендует писать на нем незашкваренным кодерам.
                                Ответить
                                • моно тоже жопаэль же
                                  Ответить
                                  • GPL еще не означает свободу самого языка. А обещаниям мелкософта не судится (когда все плотно будут юзать C#) - никто не верит.

                                    Не можешь в цитату - я помогу тебе:
                                    http://www.fsf.org/news/dont-depend-on-mono
                                    The problem is not unique to Mono; any free implementation of C# would raise the same issue. The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents. This is a serious danger, and only fools would ignore it until the day it actually happens. We need to take precautions now to protect ourselves from this future danger.
                                    This is not to say that implementing C# is a bad thing. Free C# implementations permit users to run their C# programs on free platforms, which is good. Ideally we want to provide free implementations for all languages that programmers have used.

                                    The problem is not in the C# implementations. If we lose the use of C#, we will lose them too. That doesn't make them unethical, but it means that writing them and using them is taking a gratuitous risk.

                                    We should systematically arrange to depend on the free C# implementations as little as possible. In other words, we should discourage people from writing programs in C#.
                                    Ответить
                                    • C# - это только синтаксис, Вы сейчас говорите о CLR. А были ли прецеденты с .NET? Мне кажется это паранойей, на Xamarin еще за MonoDroid и т.п. еще никто не наезжал насколько я знаю.
                                      Ответить
                                      • так пока раскручивается, и не будут наезжать. А когда (и если) станет популярным, то захотят снимать сливки.
                                        Ответить
                                        • Mono в принципе не способен набрать такой популярности, хотя бы потому, что это *nix, который не является доминантной операционной системой. К тому же, большинство разработчиков грубо говоря "брезгует" использовать Mono. Мне кажется, у Mono есть шансы только в ASP.NET MVC... :)
                                          Ответить
                                          • моно создается с подачи микрософта, о чем вы?
                                            Ответить
                          • у меня моно ни разу не сегфолтит. возможно, причина в кривых сторонних биндингах. бывает, что по счастливой случайности неправильно задекларированный pinvoke легко съедается MS.NET из-за счастливого расположения layout'а стека, а под mono крашит.
                            Ответить
                        • >забил на шарп и его изучение.
                          ну просто не надо было от кроссплатформености плясать, а юзать его под родные виндозные фреймворки
                          Ответить
                          • Ну для души меня привязанные к винде технологии совершенно не беспокоят. А по работе шарп мне пока не требуется.
                            Ответить
                      • .net 4
                        Ответить
                        • ну а теперь бы контекста для прояснения говнистости
                          Ответить
                          • public abstract class ReportBase<TEntry>
                            {
                                // ...
                                protected abstract Type GetEntryType();
                                // ...
                            }


                            ReportEntry в частном случае это и есть TEntry
                            public class BonusReportGenerator : ReportBase<BonusReportGenerator.ReportEntry>
                            Ответить
                            • Тогда делаем функцию в базовом классе полноценной (не абстрактной, и даже не виртуальной):
                              public abstract class ReportBase<TEntry>
                              {
                                  // ...
                                  protected Type GetEntryType()
                                  {
                                  	return typeof(TEntry);
                                  }
                                  // ...
                              }

                              И в дочерних не надо ничего доделывать по этому моменту.
                              Ответить
                  • тут вообще хрен поймёшь, что всё это безобразие делает. Может у человека паттернизм головного мозга )
                    Ответить
    • Сам как раз пару дней назад использовал этот прием. Проблема в том, что мне нужен тип, определяемый в потомке, в методе базового класса. При этом у меня нет объекта, чтобы получить тип через GetType. Конкретно, строчка из метода в базовом классе:

      XmlSerializer serializer = new XmlSerializer(GetModelType());
      ....
      var objData = serializer.Deserialize(stream);

      Где GetModelType() - метод, аналогичный приведенному. Т.е. у меня в базовом классе тип для десериализации объекта определяется конкретным потомком.

      Если кто подскажет, как сделать проще - буду благодарен.
      Ответить
      • Как-то так может быть: http://ideone.com/2sRXqA ?

        Здесь A - базовый класс, B - та самая модель, тип которой нам хочется знать внутри А, чтобы вызвать для нее десериализатор. Или там GetModelType() не всегда возвращает свой собственный тип?

        P.S. С C# у меня плоховато, если ошибся - не ругайте ;)
        Ответить
        • >> При этом у меня нет объекта
          А у тебя есть этот объект - this. Видимо, отношение примерно как я и подумал: ModelMapper.GetModelType() == typeof(Model). К примеру, хотим десериализовать объект Model, которого, разумеется, ещё нет. По этому, в частности, модели по соглашению имеют дефолтные конструкторы, чтобы можно было сконструировать без параметров и десериализовать, хоть частенько это нарушает инкапсуляцию.
          Ответить
    • похоже на type converter'ы типа как для С#'s IDEs

      looks legit imho
      Ответить

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