Обновить

Комментарии 44

думаю, что большинство из вас хотело бы создавать свои игры на Unity или Godot

Статья это переделанное выступление к первокурсникам?

Не понял, о чем вы. В любом случае, не вижу ничего плохого в ЦА в виде студентов

Геймдев в России мертв по объективным причинам: закрыты внешние рынки продаж, внутренний рынок мал

А вот когда Пажитнов придумывал Тетрис, он про внешние и внутренние рынки не думал...

Шо, опять?!!!

P.S. Гайды вчерашний день. Хорошие, плохие ли, но вчерашний. Кому сейчас надо изучать основы шарпа, если клавдия набросает каркас приложения, да еще с функционалом - только попроси. А до действительно непростых вещей автору еще долго добираться.

Возможно, человек и не думал о C#, встретил эту статью, посмотрел и подумал: какой классный язык, надо бы его заценить.

В этом плане материал полезен :)

Если человек не думал о шарпе, он ему и не нужен. С этими языками почему-то всегда телега поперед лошади. "А я слышал го зашибись язык, давайте на нем проект запилим!"(ц).

Язык - средство/инструмент, проект - цель, и никак иначе. Ну или "кровавый энтерпраиз"(ц) и неподьемное наследие легаси. А читать книжки по шарпу без реального проекта - время на ветер.

Да, мотивации в статье, кажется, не достаточно. Было бы прикольно начать с каких-нибудь примеров со знаковыми фишками языка, например LINQ. "Хотите так же? Давайте разбираться..."

Учту. Я решил приводить примеры из моего опыта в модмейкинге и наблюдениями из игр. На таких примерах информация воспринимается интереснее. Во второй части как раз есть классы с примерами в духе WarCraft 3 и т.д.

какой классный язык, надо бы его заценить

Вы правы, это я :)

Давно уже хочу начать вместо JS использовать C#. Рантаймом будет, конечно, .NET. Вроде бы у JS и C# общих рантаймов нет, а жаль... вон, в Node.js ввозят поддержку TS, можно было бы и C# через прослойку какую-нибудь...

А ещё нейронки, когда хочешь понять основы - зло. Поддерживать своё костылеводство тоже будет нейросеть? Да как бы не так!

за счет гибкости (ну или отсутствия типов) javascript легче навернуть систему типов TS а не C# потому что из-за отсутствия discriminated unions многие фишки TS не доступны в C#

Чтошш, ваше счастье, discriminated unions с C# обещают в этом году

Их, кажется, уже несколько лет обещают "в следующей версии" =)

3 года жду чтобы переписать 2 метода))))

Не переживайте, primary constructors тоже обещали в 6, зарелизили в 9.

Спасибо за структурированную подачу. Прочитал с интересом. Я -пхпшник по жизни, если че...

Рад слышать!

Например, новичок хочет показать, что аргументы методы Add не меняются, поэтому добавляет модификатор in:

int Add(in int x, in int y){   return x + y;}

В итоге получается упаковка (boxing) типа int в object, что ведет к лишним накладным расходам.

Шта? Значение размещается в стеке, и затем передаётся ссылка на него - это да. Но, блин, БОКСИНГА здесь нет!

Спасибо за замечание, исправлю

о а это кстати тренд ллмок врать про боксинг при возврате значения из функции. это уже 3я статья. в первой было такое сказано про go. а во второй - про rust & go.

Никаких ИИ! Сознательно писал все с головы, отсюда и много орфографических ошибок было. Про боксинг по памяти воспроизвёл наблюдения из опыта с in

Visual Studio 2022

Уже устарел. Есть 2026 с net10

Поэтому я написал Visual Studio 2022+

Зачем начинающему показывать Main(), если уже можно не показывать? Чем меньше нагружать грудой слов со старта, тем легче пойдёт. А про Main() и чуть позже можно разжевать.

Это же сколько незнакомых слов со старта: using, System, class, Program, static, void, Main - до которых ещё долго и сразу все не объяснить, не напугав.

Думаю, здесь нет идеального решения, я постарался минимально объяснить о стартовом проекте, сознательно убрал неймспейсы, аргументы Main. Открыл Шилдта, он тоже дает много вводных, так что получаются лишь разные вариации одного и того же, как по мне

Однажды меня попросили научить программированию и я решил, что это отличная идея. Ещё до самого языка пришлось объяснять, что такое консольные приложения и зачем они вообще нужны. Так что программирование начинается не с кода.

А за актуальным гайдом по C# уже много лет всех отправляю сюда от ребят из "Контура".

сюда

Где найти exe-файл — результат компиляции моего проекта
Скорее всего в подпапке bin/Debug папки вашего проекта

Рукалицо.

Вы реально на таком говне учитесь чему-то? Чем плохи книжки, которых по шарпу за 20 лет написан не один десяток?

Вот не надо, ulearn довольно хороший ресурс.

Всю дорогу в .NET не хватало от мира Джавы (или Питона, или Раста) возможности сделать один файл и запустить его. Теперь можно с dotnet run foo.cs. И я думаю для современного пути C# с file-based app будет проще учить именно язык, а не CLR. Так что как раз сейчас достаточно VS Code или nvim.

В мотивационную часть я бы добавил, что в перспективе, учитывая текущий тренд, C# выйдет за пределы классического компилируемого ЯП и зайдёт в нишу скриптов. Что сильно расширяет проф. горизонт.
Уже сейчас можно просто "выполнить скрипт" dotnet run script.cs - не нужен ни проект, ни среда разработки, только SDK.

А то и просто выполнять команды прямо в консоле (пока правда через установку, например, https://github.com/waf/CSharpRepl ). Классная, кстати, вещь и легко добавляется в терминал для удобного запуска.

Спасибо. Да, думаю об этом можно будет сказать

На данный момент C# уже во многих аспектах превосходит своих прародителей - Java и Delphi, первого в производительности, а второго в современных средствах разработки

А в чем именно состоят "современные средства разработки" и в чем они превосходят Delphi?

Не претендую на истину в последней инстанции, но объясню свою мотивацию так написать. Delphi много лет не развивается или делает это медленно \ не так заметно. По википедии видим обновление языка в 2013 году. Языки должны развиваться, идти в ногу со временем, как мне кажется. В то же время шарп сделал скачок от клона Java и Windows-only к кроссплатформенности, AOT компиляции, высокой скорости, более низкоуровневым абстракциям и т.д. Ну и рейтинг языков показывает у шарпа 5 место с тенденцией роста. Сам много раз слышал мнение, что шарп стал тем, чем раньше был Delphi.

  1. То что вы привели - ложные сведения. (https://ru.wikipedia.org/wiki/Delphi_(среда_разработки)). Обновляется язык (и среда разработки) регулярно, каждые 3-4 месяца. Последний, на сегодняшний день, релиз был в сентябре 2025 года. А новая версия уже в закрытом бета тесте. В связи с этим ...

  2. Delphi давно является кроссплатформенным языком и, в отличии от C#, позволяет один и тот же проект собрать сразу под все платформы (Win, Linux, MacOS, iOS, Android). В том числе, Web (обычный веб-приложение, PAW или Electron) и RaspbberyPi (через pas2js). На подходе и WebAsm.

  3. Delphi позволяет (и позволял всегда) создавать независимые приложения, не требующие предустановки рантайма в ОС.

  4. В языке так же добавлены и дженерики и атрибуты и енумераторы и инлайн объявление и выведение типов и таски и анонимные функции с захватом переменных и поддержка raw строк, тернарный оператор и другие многие новые языковые конструкции (типа for var in, is not, not in, noreturn). В бете тестируются null safety и nullable-типы.

Так что, я рассчитывал, что будет что-то действительно интересное, задавая подобный вопрос

В таком случае странно, что про язык мало что слышно сейчас.

У @HemulGM была недавно интересная статья с примерами современного Delphi. Что-то про обучение кажется. Справедливости ради, видно, что Delphi очень хочет и старается догнать шарп по богатству синтаксиса. Но, во-первых, силы не равны, с MS сложно бодаться. Во-вторых, второй шарп мало кому нужен. Сам шарп-то позиционировался как джава следующего поколения, особенно, когда .NET стал кроссплатформенным)

Спасибо, ознакомлюсь!

Зайдя на статью я изначально ожидал катастрофу, тем не менее почитав, в целом скажу неплохо.

Разве что выбило объяснение типов и литералов до переменных : )

Ну и немного критики по технической части (люблю придраться по мелочам):

-Нет суффикса u для uint и литералов с экспонентой.

-new не означает вызов конструктора, оно означает примерно тоже самое что и в C++: аллоцируй в куче и дай ссылку (упакованную в тип). На самом деле можно вызвать конструктор и без new, через :this()

С new можно объявлять массивы, анонимные типы и вообще new может быть модификатором или ограничением

Редакт: существование структур несколько ломает мою позицию здесь должен признать

-в C# есть >>> unsigned right shift (Ну и плюс unsafe)

-для Nullable<T> хорошо бы упомянуть .Value поле, что бы получить значение без каста, постоянно нужно

-для обработки ошибок хорошо бы упомянуть rethrow

-Структуры данных в C# кличут коллекциями, это не то что бы важно; что важно это почему нет LinkedList, одна из ключевых структур данных прямо по учебнику. (И HashSet тоже, в сравнении очередь практически не используется)

-"Для всех остальных случаев используйте foreach." Но foreach это вызов GetEnumerator(), его конечно хорошо оптимизировали, но... он буквально разворачивается в for цикл в IL.

Хороший пример силы for ещё проход про LinkedList

-DateTime.Now очень плохая идея, хотя бы DateTime.UtcNow, что бы не прострелить ногу часовыми поясами

-в Random очень полезен NextDouble, возвращает 0..1, жалко пропустить.

Спасибо за замечания, учту!

А про автоматическое закрытие консоли, не, пожалуй упоминать не будем, да? Если пользователь не знаком, пусть гуглит сам или просто забросит сразу, зачем о нём думать... Какие ReadLine() в конце, какие настройки IDE, зачем оно вам, мелькнёт консоль и ок, вы добились результата!

Тем более про установку IDE, зачем человеку который в первый раз видит IDE и знакомится с C# лишняя информация! Это ведь не статья для "начинающих и джунов", хотя, погодите...

Вы правы, спасибо за замечания

Не очень понятно зачем потрачено столько труда, когда УЖЕ есть отличные книги по C#, и если нужно бесплатно, то можно скачать с торрентов

Книги это однозначно хорошо, на их место не претендую. Это просто быстрый гайд (его часть, точнее) с интересными примерами, а уже гайд в свою очередь должен заинтересовать людей читать книги и читать документацию.

Спасибо, дружище!

Появились необходимость писать скрипты на c# для СКАДА, времени на чтение мануалов нет, твой краткий материал - то, что необходимо. Продолжай, пожалуйста!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации