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

    +3

    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
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    public class Man
        {
            public Man(string id, string name, IEnumerable<Brother> brothers, Guid id, int year, int age) : base(id, year)
            {
                this.Name = name;
                this.Brothers = brothers;
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, string note, IEnumerable<Brother> brothers, Guid id, int year, int age) : base(id, note, year)
            {
                this.Name = name;
                this.Brothers = brothers;
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, IEnumerable<Brother> brothers, Guid id, int year, int age) : base(id, year)
            {
                this.Name = name;
                this.Brothers = brothers;
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, string note, IEnumerable<Brother> brothers, Guid id, int year, int age) : base(id, note, year)
            {
                this.Name = name;
                this.Brothers = brothers;
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, Guid id, int year, int age) : base(id, year)
            {
                this.Name = name;
                this.Brothers = new List<Brother>() { new Brother(Guid.NewGuid().ToString()) };
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, string note, Guid id, int year, int age) : base(id, note, year)
            {
                this.Name = name;
                this.Brothers = new List<Brother>() { new Brother(Guid.NewGuid().ToString()) };
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, Guid id, int year, int age) : base(id, year)
            {
                this.Name = name;
                this.Brothers = new List<Brother>() { new Brother(Guid.NewGuid().ToString()) };
                this.Id = id;
                this.Age = age;
            }
    
            public Man(string id, string name, string note, Guid id, int year, int age) : base(id, note, year)
            {
                this.Name = name;
                this.Id = id;
                this.Brothers = new List<Brother>() { new Brother(Guid.NewGuid().ToString()) };
                this.Age = age;
            }
    
            public string Name { get; }
    
            public Guid Id { get; }
    
            public IEnumerable<Brother> Brothers { get; }
    
            public int Age { get; }
    
        }

    Человек знал, но нехотел использовать значение параметра конструктора по умолчанию, потому что это усложняет структуру.
    Переменные переназвал почеловечнее.

    Запостил: homk, 10 Апреля 2016

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

    • Значения по умолчанию в C# же зло
      Ответить
      • Чем ж в ровных руках?
        А получить оные не настолько сложно.
        Ответить
      • Чего это оно зло? Код позволяет сократить и сделать более читаемым? Позволяет. Всё, что это позволяет - уже не может быть злом по определению.
        Ответить
        • Да ибо они появились кажись в чётвёртом Шарпике и не прижились на уровне базовых библиотек сильно.
          Ответить
      • а тебя самого не смущает каскад базовых конструкторов?
        p.s. я кстати может чего не понимаю, но какие базовые конструкторы? он же от System.Object наследуется
        Ответить
      • показать все, что скрытону да, "в ЯП есть средство, но им лучше не пользоваться"
        Здравствуй, C++
        Ответить
        • а чо, есть чо за средства в языке, с самостоятельной историей в уже скоро как 30 лет?
          я вот могу только вспомнить throw-декларации
          Ответить
          • > чо за средства в языке

            Тут скорее дело не в языке, а в тех, кто его использует. У каждого проекта свои представления (и заблуждения?) о том, что в плюсах хорошо, а что плохо.

            Некоторые считают, что исключениями пользоваться принципиально не надо (Google, LLVM), где-то они являются предпочтительным способом сигнализации об ошибках (FB), порой даже неуместно.

            Некоторые упарываются по шаблонному метапрограммированию, другие принципиально избегают использования сложных шаблонов.

            Использовать или нет RTTI - тоже часто спорный вопрос.

            Вообще говоря, многие команды составили себе список "C++: The Good Parts", причём список этих good parts у разных команд может различаться кардинально.
            Ответить
    • Обожаю разнообразие конструкторов! Не, ну действительно, ты же сразу не знаешь, какие параметры нужно будет инициализировать из конструктора.
      Хомк, подкинь ещё автору идею о том, что можно было бы сделать все возможные варианты перестановки аргументов в конструкторе. Вдруг кому-то будет удобнее передавать сначала братву, а потом айди?
      Ответить
      • Самый гибкий вариант — принимать единственный аргумент, содержащий ассоциативный массив параметров.
        Ответить
        • Это уже PHP головного мозга ) В сишарпике давно уже есть инициализация полей, каких надо в каком надо порядке.
          TimingLinks.Add(new TimingLink
          {
          	StartId = row.ParentId,
          	EndId = row.Id,
          	LinkType = Telerik.WinControls.UI.TasksLinkType.FinishToStart
          });
          Ответить
          • Правильно, но это сахар для:
            newTimingLink = new TimingLink();
            newTimingLink.StartId = row.ParentId;
            newTimingLink.EndId = row.Id;
            newTimingLink.LinkType = Telerik.WinControls.UI.TasksLinkType.FinishToStart;
            TimingLinks.Add(newTimingLink);

            Т.е. поля должны быть { get; set; } . А тут { get } ( м.б, можно было вообще поставить readonly)
            Ответить
            • Нет такой конструкции в сишарпе { get }. Либо пара геттер/сеттер, либо геттер с телом и тянет backing field. Ну или это просто поля.
              Как раз поля ридонли здесь нормально и проинициализируется, как будто из конструктора.
              Ответить
              • а string myString { get { return "asdasd"; } } что тогда?
                Ответить
                • Эта конструкция совершенно легальна в рамках языка, но не применима к контексту разговора. Из конструктора такой филд не проинициализируешь.
                  Ответить
              • показать все, что скрытоВообще-то такая конструкция в последнем шарпе есть.
                Ответить
        • Какой язык мы не строим – все JS получается!
          Ответить
    • показать все, что скрытоА зачем было дублировать каждую пару конструкторов в посте?
      Для пущего страху?
      Ответить

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