Когда я пишу код на C #, я использую практически все его возможности. Не все сразу, но каждая функция C # имеет свое место. Многие люди не знают, что в C # есть оператор «::», и никогда не слышали о « extern alias », но мне пришлось использовать его сегодня, чтобы разрешить конфликт имен между двумя DLL.
«Возврат доходности» - одна из моих любимых функций. Я не использую его каждый день, но я обычно писал интерфейсы IEnumerator вручную в C # 1.0, и это было огромной болью, которую я бы не хотел повторять. Кроме того, это действительно полезно для написания сопрограмм , даже сопрограмм, которые не производят никакого вывода (yield return null
= приостановить операцию).
C # имеет внутренние функции и замыкания. Когда я пишу код на C ++, их очень не хватает.
Кажется глупым, что C # имеет так много разных способов написания внутренней функции,
delegate(int x) { return x*x; }
x => x*x
(int x) => { return x*x; }
Но # 1 только по историческим причинам и формы 2 и 3 имеют свое место.
Будь то методы расширения, перегрузка операторов, обобщенные элементы, общие ограничения, параметры по умолчанию, объединение нулей, троичный оператор, статические конструкторы, проверенные / непроверенные, авто-свойства, директивы препроцессора, типы значений ... как программист на полный рабочий день Я использую все это по крайней мере изредка, и устранение любой из этих функций либо создает для меня дополнительную работу и обострение (foo(x) ?? bar(y)
теперь должно быть написано { var temp = foo(x); if (temp == null) temp = bar(y) }
), либо требует от меня писать более толстый / медленный код (например, если вы заменяете типы значений классами, часть моего кода будет замедляться, а использование памяти резко увеличится).
Далеко не слишком много функций, я думаю, что этого недостаточно. Каждый раз, когда мне приходится писать подобный код снова и снова, я ругаю язык за то, что у него нет ярлыков.
Уловка позволяет программистам, которые не работают полный рабочий день, понимать. (что касается тех людей, которые программируют на C # все время и до сих пор не могут выучить язык - ну, уволить их?) Возможно, это помогло бы, если бы Microsoft сделала функции более «Googlable» или, по крайней мере, «F1-способны». Например, когда я ставлю курсор на «??» или "=>" и нажмите F1, я должен получить справочную страницу для этих операторов. Или рассмотрим статические конструкторы: если код говорит «статический конструктор ()» вместо «статический MyClassName ()», тогда будет проще найти его в Интернете.
IMO, большая проблема, чем раздувание языка, - раздувание фреймворка. Инфраструктура .NET является гигантской: Microsoft постоянно перевоплощает одни и те же вещи, каждый раз создавая раздутые, несовершенные проекты: WinForms и WPF, различные способы доступа к базе данных и т. Д.