Для чего нужен язык C#
Как в Микрософте сделали свой язык программирования. И зачем.
Вы наверняка слышали о языках программирования, которые начинаются на «Си»: просто «Си», «Си плюс плюс» и «Си шарп». Сейчас хорошее время, чтобы разобраться, что к чему.
Главное
Игры на DirectX
DirectX — набор компонентов, которые используются для программирования трёхмерной графики и работы со звуком и видео. С помощью C# можно легко подключиться к DirectX и написать свой трёхмерный шутер или любую другую игру. Технически это выглядит так: C# отвечает за логику и поведение игры, а DirectX — за графику и звуковое сопровождение.

Игры на Unity
Unity — это движок для создания двумерных и трёхмерных игр. Он берёт на себя физику, графику и многие служебные штуки, чтобы вы могли сосредоточиться на контенте и сценарии игры. Всё бы хорошо, но без программирования в Unity всё равно не получится, и бывалые разработчики рекомендуют для Unity выбирать именно C#. Есть и другие варианты, например, собственный язык UnityScript или JavaScript.

Машинное обучение
Так как C# — это проект Микрософта, то у него всё в порядке с поддержкой и с библиотеками. В мире C# библиотеки есть практически для всего, в том числе и для работы с нейросетями и машинным обучением — ML.NET.
Это значит, что вы можете использовать все возможности нейронок в приложениях и объединять их с помощью одного и того же языка программирования. А так как C# — мультиплатформенный язык, то машинное обучение можно встроить практически во что угодно, от мобильных приложений до носимой электроники.

Игры и программы для разных мобильных платформ
Чтобы один и тот же C#-код работал на разных платформах, используют Mono и Xamarin — продукты для кросс-платформенной разработки под разные операционные платформы.
Программы и сервисы для веба
C# можно использовать для создания веб-приложений. Работает так:
Теоретически вы можете написать приложение для п. 2 на любом языке, который поддерживает серверные решения Microsoft, в некоторых случаях это может быть и PHP. Но эксперты говорят, что для софта Microsoft есть смысл писать на их языке C#.
Сразу скажем: в большинстве бытовых и любительских проектов вам будет достаточно даже не приложения на C# (или Python, Ruby или PHP), а уже готового решения. Например, если нужен блог, лучше запустить его на хостинге WordPress и просто начать им пользоваться. Это не самый быстрый софт и не самый гибкий, но его запуск займёт у вас 15 минут, а не 15 недель.
А вот на сложных высоконагруженных сайтах WordPress уже не потянет — нужны другие технологии. И тут уже требуются глубокие знания: на одном железе и с одним стеком технологий лучше всего будет работать C#, на другом — PHP, на третьем — Ruby и т. д.
Современные возможности C++, о которых надо знать всем программистам
Автор материала, перевод которого мы сегодня публикуем, говорит, что C++, в его современном виде, если сравнивать его с тем, чем был этот язык несколько лет назад, значительно изменился в лучшую сторону. Конечно, эти изменения произошли далеко не сразу. Например, в былые времена C++ не хватало динамичности. Непросто было найти человека, который мог бы сказать, что он питает к этому языку нежные чувства. Всё изменилось тогда, когда те, кто отвечает за стандартизацию языка, решили дать ход новшествам. В 2011 году C++ стал динамическим языком, языком, который постоянно развивается и вызывает у программистов куда больше положительных эмоций.
Не стоит думать, что язык стал проще. Его всё ещё можно назвать одним из самых сложных широко используемых языков программирования, если не самым сложным. Но современный C++ стал гораздо дружелюбнее, чем раньше.
Сегодня мы поговорим о некоторых новых возможностях языка (начиная с C++ 11, которому, кстати, уже 8 лет), знать о которых будет полезно любому программисту.
Ключевое слово auto
Обратите внимание на строку, последнюю в этом примере, комментарий к которой отмечен как #1 (здесь и далее подобным образом мы будем отмечать строки, которые будем, после примеров, разбирать). В этой строке нет инициализатора, так делать нельзя. Код, расположенный в этой строке, не позволяет компилятору узнать о том, каким должен быть тип соответствующей переменной.
Изначально возможности ключевого слова auto в C++ было довольно-таки ограниченными. Затем, в более свежих версиях языка, возможностей у auto добавилось. Вот ещё один пример:
В строках #1 и #2 применяется инициализация переменной с использованием фигурных скобок — ещё одна новая возможность C++ 11.
Не забывайте о том, что при использовании ключевого слова auto у компилятора должен быть какой-нибудь способ вывести тип переменной.
Теперь — интересный вопрос. Что случится, если воспользоваться конструкцией наподобие auto a = <1, 2, 3>? Что это? Вектор, или повод для ошибки компиляции?
И наконец, как уже было сказано, вывод типов компилятором может быть крайне полезен в том случае, если приходится работать со сложными структурами данных. Вот пример:
Лямбда-выражения
В C++ 11 появилась поддержка лямбда-выражений. Они напоминают анонимные функции в JavaScript, их можно сравнить с функциональными объектами без имён. Они захватывают переменные в различных областях видимости в зависимости от их описания, для которого используются компактные синтаксические конструкции. Кроме того, их можно назначать переменным.
Лямбда-выражения — весьма полезный инструмент для тех случаев, когда в коде нужно выполнить какую-нибудь небольшую операцию, но для этого не хочется писать отдельную функцию. Ещё один распространённый пример их использования — создание функций, используемых при сравнении значений. Например:
В этом кратком примере можно найти много интересного.
Вот выдержка из этого репозитория, посвящённого современным возможностям C++:
Здесь, если бы доступ к переменной factor осуществлялся бы по значению (тогда при описании лямбда-выражения использовалась бы маска переменных [factor] ), то в строке #1 значение factor менять было бы нельзя — просто потому что у нас не было бы прав на выполнение такой операции. В данном же примере право на подобные действия у нас есть. В таких ситуациях важно не злоупотреблять возможностями, которые даёт доступ к переменным по ссылке.
Выражения инициализации переменных внутри конструкций if и switch
Это новшество C++ 17 очень понравилось мне сразу после того, как я о нём узнал. Рассмотрим пример:
Выполнение вычислений во время компиляции с использованием constexpr
Программисты стремятся к тому, чтобы свести к минимуму объём вычислений, выполняемых во время выполнения программ. В результате, если некие операции можно выполнить в процессе компиляции и тем самым снять нагрузку с системы при выполнении программы, это хорошо повлияет на поведение программы во время выполнения. Вот пример:
Интересно отметить, что позже, в C++ 17, появились конструкции constexpr-if и constexpr-lambda.
Структуры данных tuple
Автоматический вывод типа аргумента шаблона класса
Выглядит название этой возможности довольно-таки длинным и сложным, но на самом деле ничего сложного тут нет. Основная идея тут заключается в том, что в C++ 17 вывод типов аргументов шаблонов выполняется и для стандартных шаблонов классов. Ранее это поддерживалось лишь для функциональных шаблонов. В результате оказывается, что раньше писали так:
С выходом C++ 17 эту конструкцию стало можно заменить на эту:
Вывод типов выполняется неявно. Этим механизмом ещё удобнее пользоваться в том случае, когда речь идёт о кортежах. А именно, раньше приходилось писать следующее:
Теперь же то же самое выглядит так:
Тут стоит отметить, что эти возможности не покажутся чем-то достойным внимания тем, кто не особенно хорошо знаком с шаблонами C++.
Умные указатели
Работа с указателями в C++ может оказаться настоящим кошмаром. Благодаря той свободе, которую язык даёт программисту, порой ему бывает очень непросто, как говорится, «не выстрелить себе в ногу». Во многих случаях к такому вот «выстрелу» программиста подталкивают именно указатели.
К нашему счастью, в C++ 11 появились умные указатели, которые гораздо удобнее обычных. Они помогают программисту избегать утечек памяти, освобождая, когда это возможно, ресурсы. Кроме того, они дают гарантию безопасности по исключениям.
Итоги
Вот хороший репозиторий, в который, полагаем, интересно будет заглядывать тем, кто следит за новшествами C++. В этом языке постоянно появляется что-то новое. Здесь мы коснулись лишь нескольких современных возможностей языка. На самом деле их очень много. Вполне возможно то, что мы о них ещё поговорим.
Уважаемые читатели! Какие современные возможности C++ кажутся вам самыми интересными и полезными?
Пиши на C как джентльмен
«Code Monkey like Fritos
Code Monkey like Tab and Mountain Dew
Code Monkey very simple man
With big warm fuzzy secret heart:
Code Monkey like you
Code Monkey like you»
— Jonathan Coulton — Code Monkey
Я думаю, многим знакома эта шикарная песня Jonathan Coulton’а, и эта жизненная ситуация, когда «Rob say Code Monkey very diligent», но «his output stink» и «his code not ‘functional’ or ‘elegant’».
Язык Си, подаривший нам столько полезного софта, потихоньку был вытеснен из десктопа и энтерпрайза такими высокоуровневыми гигантами как Java и C# и занял нишу системного программирования. И все бы хорошо, но системщики — очень отбитые своеобразные ребята. Задачи, которые порой возникают перед ними даже своей формулировкой способны вогнать в ужас простых смертных. Собственно говоря, так же, как и некоторые решения.
Сегодня мы поговорим о некоторых полезных практиках, которые я вынес из глубин системного программирования на Си. Поехали.
Пункты будут располагаться от самых фундаментальных и очевидных (ориентированных на новичков в языке Си) до самых специфичных, но полезных. Если чувствуете, что вы это знаете — листайте дальше.
Практика I: Соблюдайте единый Code Style и фундаментальные принципы «хорошего тона»
Функция принимает в качестве аргумента переменную INPUT, парсит её в массив IncomingValues и возвращает result_to_return? Отставить быдлокод!
То, что в первую очередь выдает новичка — несоблюдение единого стиля написания кода в рамках конкретного приложения. Следом идет игнорирование правил «хорошего тона».
Вот несколько самых распространенных рекомендаций к оформлению кода на Си:
Вообще, этот пункт спорный. Мне доводилось видеть проекты, где имена переменных и функций пишутся в camelCase и PascalCase соответственно.
UPD: Спасибо пользователю fogree за то, что он обнаружил косяк с перепутанным PascalCase и camelCase.
Кстати, рекомендую взять за привычку писать код так, чтобы одна функция делала только одну вещь. Именно это должно отразиться в названии.
То же можно сказать и про переменные — никаких a, b, c — в названии должен быть отражен смысл (итераторы не в счет). Самодокументируемый код — очень хорошая практика.
Как правило, можно выбрать между стилем написания названия: PascalCase и under_score, тут уже зависит от вас.
По возможности инициализируйте переменные при объявлении. Численные с помощью нуля, указатели — NULL:
Ну оставили мы переменные неинициализированными, и что?
А то. Если смотреть их (до инициализации) в отладке (в том же gdb), там будет лежать мусор. Это нередко сбивает с толку (особенно, если мусор «похож на правду»). Про указатели я вообще молчу.
Не надо комментировать каждую строчку кода — если вы пишите самодокументируемый код, большая часть его будет простой для понимания.
Оптимальное решение — писать описания функций, если из аргументов и названия сложно понять весь её функционал. Для переменных — правила те же, в пояснении нуждаются только какие-то нелинейный вещи, где одного названия мало.
На самом деле, в вопросе документации у вас есть полная свобода действий — надо лишь следить, чтобы комментариев было не много, но достаточно, чтобы человек, видящий ваш код в первый раз, не задавал вопросов.
Если вы постоянно работаете с трекерами (вроде RedMine), то при внесении правок в код можно указать номер задачи, в рамках которой эти правки были внесены. Если у кого-то при просмотре кода возникнет вопрос а-ля «Зачем тут этот функционал?», ему не придется далеко ходить. В нашей компании еще пишут фамилию программиста, чтобы если что знать, к кому идти с расспросами.
P.S. Для тех кто устраивается на работу: так же не следует забывать, что в каждой компании, как правило, используется свой Code Style, и ему нужно следовать. В противном сулучае можно получить как минимум укоризненные взгляды товарищей-разрабов или втык от начальства.
Практика II: Оптимизируйте структуру вашего проекта
Если у вас в проекте несколько файлов — имеет смысл хорошо подумать над структурой проекта.
Каждый проект уникален, но, тем не менее, существует ряд рекомендаций, которые помогут удобно структурировать проект:
Не следует называть файлы file1.c, mySUPER_COOL_header.h и т.д.
main.c — для файла с точкой входа, graph_const.h — для заголовочника с графическими константами будет в самый раз.
Если он точно не знает, какой файл ему нужен? Можно сберечь много нервов, если сделать так:
Если у вас игра, в которой есть файлы, отвечающие за движок/звук/графику — будет удобно раскидать их по папкам. Звук, графику и движок — отдельно друг от друга.
Практика III: Используйте враппер-функции для обработки возвращаемых значений
Враппер-функция (функция-обертка) в языке Си используется как функция со встроенной обработкой возвращаемого значения. Как правило, в случае ошибки в работе функции, возвращаемое значение вам об этом скажет, а глобальная переменная errno примет в себя код ошибки.
Если вы пишите в системе (а сейчас большинство программ на си — именно системные программы), то нет ничего хуже, чем «немое» падение программы. По-хорошему, она должна красиво завершиться, напоследок сказав, что именно пошло не по плану.
Но обрабатывать значение от каждой функции в коде — такое себе решение. Тут же упадет читаемость, и объем (+ избыточность) кода увеличится в пару раз.
Тут и помогают врапперы. Рассмотрим первый пример — безопасный код без врапперов:
Ну, такое себе, не правда ли? Теперь попробуем с обертками.
Как видите, код по-прежнему безопасен (не будет «немого» падения), но теперь его функциональная часть гораздо компактнее.
Я называю обертки именем самих функций, но с большой буквы. Каждый сам волен выбрать, как их оформлять.
В использовании оберток есть небольшой минус, который, если захотеть, можно решить костылем. А что это за минус — можете предположить в комментариях 🙂
Практика IV: Используйте keywords как профи
Хорошее знание keywords никогда не будет лишним. Да, и без них ваш код будет работать, не спорю. Но когда речь зайдет об экономии места, быстродействии и оптимизации — это именно то, чего вам будет не хватать.
К тому же, мало кто может похвастаться хорошим знанием ключевых слов, поэтому их повседневное использование может быть шансом блеснуть знаниями перед коллегами. Однако, не надо бездумно пихать кейворды всюду, куда только можно. Вот вам несколько фич:
И это только вершина айсберга. Различных модификаторов и ключевых слов — куча.
Практика V: Не доверяйте себе. Доверяйте valgrind.
Если у вас в программе есть работа со строками, динамическое выделение памяти и все, где замешаны указатели, то не будет лишним проверить себя.
Valgrind — программа, которая создана для того, чтобы помочь программисту выявить утечки памяти и ошибки контекста. Не буду вдаваться в подробности, скажу лишь, что даже в небольших программах он нередко находит косяки, которые совсем не очевидны для большинства программистов, но, тем не менее, в эксплуатации могут повлечь за собой большие проблемы. За всем не уследишь.
+ у нее есть и другой полезный функционал.
Более подробно о нем можно узнать тут.
Практика VI: Помогайте тем, кто хочет улучшить ваш софт
Пример будет взят из исходников busybox 1.21. Для тех кто не знает, что такое busybox, можете посмотреть эту вики-статью.
UPD: до этого здесь был пример «плохого» кода из busybox. Спасибо пользователю themiron за то, что показал, что этот код был понят мною неправильно — это были лишь тонкости реализации, причем реализации очень хорошей. В качестве извинения за свою «клевету» на busybox, здесь будет пример хорошего кода.
Причем, все так же из busybox.
Код busybox очень эллегантен, пусть и совсем не прост. Всем, кто хочет взглянуть на язык си под другим углом — рекомендую ознакомиться с исходниками.
Теперь обобщения по этому пункту на примерах из busybox. Все примеры взяты из udhcpc — крохотного DHCP клиента:
Протокол DHCP имеет полную документацию в RFC, там описаны все возможные поля dhcp-пакета. Но, тем не менее, ребята озаботились и полностью задокументировали даже поля структуры. Эта структура — первое, на что посмотрит программист, расширяющий функционал программы (DHCP-клиент DHCP-пакет).
Листинг выше частично вошел сюда, т.к. подходит для еще одного примера.
Посмотрите: описание упакованных структур идет перед перечислением, отражающим размеры этих структур.
Если в этом же файле мы спустимся чуть пониже, то увидим, что объявления функций работы с опциями так же находятся в одном месте:
В udhcpc есть огромное количество опций, которые по умолчанию не используются. Каждая опция соответствует макросу, который закрывает ее номер.
Если бы они были раскомментированы — то это были бы макросы, которые не всплывают нигде в коде. Человек, который спросил бы «а зачем все эти опции?» искал бы ответ очень долго. И не нашел бы.
Как итог — у нас получилось подобие интерфейса, где комментарием закрыты те опции, методы для которых еще не реализованы.
Довольно сложный для восприятия аспект, требующий пояснения. В двух словах: если у вас есть функция, которая внутри проекта вызывается с n комбинациями различных параметров (где n — небольшое число), причем каждая комбинация вызывается по нескольку раз, имеет смысл сделать для каждой комбинации отдельную функцию, вызывающую внутри себя целевую функцию, но уже с нужными параметрами. Например. У нас есть функция, отправляющая пакеты на определенный порт и адрес:
Но dhcp не всегда нуждается в отправке пакета на один IP адрес. В основном используется широковещательная (BROADCAST) рассылка.
Но широковещательная отправка пакета — всего лишь отправка пакета по адресу, зарезервированному под broadcast. Собственно, для того, чтоб отправить широковещательный запрос, достаточно использовать описанную выше функцию, но в качестве адреса указать тот, что зарезервирован про бродкаст. Отсюда получаем функцию:
Профит этого в том, что везде, где мы будем встречать эту функцию, можно будет по названию понять, что она делает. Если бы мы использовали функцию udhcp_send_raw_packet, то нам бы осталось только гадать по параметрам.
Заключение
Пиши код так, чтобы те, кто будет его сопровождать любили тебя, а не ненавидели. Сложная гибкая реализация гораздо лучше простого костыля.
Описывай интерфейсы доступа, комментируй проблемные моменты. Не делай констант, от изменения которых придется переписывать весь код. Не допускай утечек памяти. Следи за безопасностью и отказоустойчивостью кода.
Язык программирования C#: краткая история, возможности и перспективы
Обзорная статья на тему С#. Кратко рассказываем о том, зачем этот язык нужен, где его учить и как им пользоваться.
С# («Си Шарп») – один из наиболее быстро растущих, востребованных и при этом «удобных» языков программирования. Это модификация фундаментального языка С от компании Microsoft, призванная создать наиболее универсальное средство для разработки программного обеспечения для большого количества устройств и операционных систем.
Краткая история C# и его характеристики
С# – это объектно-ориентированный язык программирования. Он был создан в период с 1998 по 2002 год командой инженеров Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота.
Язык входит в семью С-подобных языков. Синтаксис приближен к Java и C++. Его особенности:
поддерживается перегрузка операторов,
доступна делегация, атрибуты, события, обобщенные типы и анонимные функции.
Разработка Microsoft много особенностей унаследовала у Delphi, Smalltalk и Java. При этом создатели нового языка исключили из своего детища многие практики и спецификации, считающиеся «проблемными».
Основные преимущества языка
С# популярен за счет своей «простоты». Простоты для современных программистов и больших команд разработчиков, чтобы те могли в сжатые сроки создавать функциональные и производительные приложения. Этому способствуют нетипичные конструкции языка и специфичный синтаксис, помогающий максимально органично реализовать намеченные функции.
Популярность языка – еще одно значимое преимущество. Большое количество поклонников C# способствуют его развитию. Также это благоприятно влияет на рост числа вакансий, связанных с разработкой на языке Microsoft. Программисты, хорошо знакомые с С#, востребованы в индустрии, несмотря на их большое и постоянно увеличивающееся количество.
Понятный синтаксис C# заметно упрощает не только разработку как таковую, но и другие важные аспекты совместной работы, например, чтение чужого кода. Это упрощает процесс рефакторинга и исправления ошибок при работе над приложениями в больших командах.
Также нельзя не упомянуть низкий порог вхождения. С# – популярная и достаточно простая в освоении технология. Уже через полгода можно поднатореть в разработке и начать делать полноценные программы.
Что разрабатывают с помощью С#
Язык C# практически универсален. Можно использовать его для создания любого ПО: продвинутых бизнес-приложений, видеоигр, функциональных веб-приложений, приложений для Windows, macOS, мобильных программ для iOS и Android.
Видеоигры
C# без преувеличения крайне популярен среди создателей видеоигр. Язык используется для разработки игр под Windows, macOS, Android и iOS. Все дело в Unity – платформе для работы с 3D-графикой. С# лучше остальных языков адаптирован под работу с этим движком. Поэтому программисты обычно не выбирают, а сразу используют связку Unity + C#.
Из популярных проектов стоит выделить такие хиты игровой индустрии, как Bastion (кросплатформенная РПГ-адвенчура с изометрическим видом), Wasteland (популярный шутер в пост-апокалиптической вселенной), знаменитый Doom 3 и Hearthstone (карточная игра во вселенной World of Warcraft, созданная силами Blizzard).
ПО для защиты систем
Безопасность ваших программ и операционных систем обеспечивается благодаря мощным утилитам на базе C#. Колоссальное количество вирусов, на ежедневной основе атакующих компьютеры пользователей, блокируется инструментами, созданными с помощью языка Microsoft. Аналогичная ситуация наблюдается в крупном бизнесе – мировые корпорации защищаются от хакерских атак с помощью ПО, написанного на С#.
Приложения для Windows
Практически вся операционная система Microsoft существует благодаря С#. Привычные вам утилиты и приложения созданы с использованием этого языка и фреймворков, разработанных для него.
В эту категорию попадает мессенджер Skype, браузер Internet Explorer, среда для разработки Visual Studio 2012, Microsoft Office (все его составляющие, включая Word, PowerPoint, Excel, Outlook и так далее).
Сюда же можно отнести продукты компании Adobe (Photoshop, Lightroom), браузер Mozilla Firefox и Winamp.
Мобильные приложения
В некоторых кругах программистов С# считается чуть ли не лучшим языком для проектирования мобильных приложений. Все благодаря возможности создавать с помощью этого языка нативные программы для любых платформ (iOS, Android). Для создания приложений, которые идеально работают на Айфоне и на Андроид-смартфонах, используется IDE Xamarin.
Из известных программ, написанных на С#, стоит отметить Slack, Pinterest, Tableau, The World Bank и другие. «Плиточные» программы, появившиеся в Windows 8, практически все построены на базе C# и XAML.
Как стать C#-разработчиком?
Тем, кто вообще не разбирается в программировании и только начинает его изучать, следует разыскать книгу Чарльза Петцольда «Код» и запастись всеми любимыми руководствами в духе «Грокаем алгоритмы». Этого должно быть достаточно на ранних этапах знакомства с языком.
Какие программы и технологии изучать?
Есть шесть ключевых программных продуктов, на изучении которых стоит сосредоточиться в первую очередь:
Windows Presentation Foundation – фреймворк для быстрого создания интерфейсов.
Xamarin – фреймворк, добавляющий C# функции компилирования кода с адаптацией под различные платформы, включая Windows, Android и iOS. Проще говоря, он делает ПО универсальным.
ASP.NET – технология для создания «мостов» между серверным кодом и клиентской частью программ.
Entity – фреймворк для взаимодействия с базами данных как с объектами.
Language Integrated Query – технология с собственным синтаксисом для фильтрации данных. Под данными подразумевается любой тип, включая массивы, структуры, отдельные файлы и целые БД.
Visual Studio – основная среда для разработки программ на языке С#.
По ходу изучения и с появлением опыта этот список увеличится. Появятся новые фреймворки, возможно, изменится IDE, появятся дополнительные технологии, необходимые для реализации некоторых функций и т.п.
Где можно научиться программированию на С#?
В сети хватает школ, где учат разработке приложений на различных языках. Например, Яндекс.Практикум. Там есть довольные дорогие, но эффективные курсы по созданию программ на базе C#.
Есть Coursera, где учат вообще всему на этой планете, в том числе и программированию. Стоимость курсов на этой площадке варьируется, но при желании всегда можно выбить хорошую скидку, если сослаться на плохое финансовое положение.
Есть школы в духе Skillbox и GeekBrains. На них тоже есть соответствующие курсы, причем со льготной оплатой (сначала вас учат и стажируют, а потом просят оплатить обучение) и изначально невысокими ценами.
Вместо заключения делаем простейшую программу на С#
Итак, быстро приступаем к разработке своей первой программы на языке C#. Будем делать простейший калькулятор.
Загружаем программу Visual Studio.
В окне приветствия выбираем пункт Create a new project.
Указываем язык C#, систему – Windows, а тип – Console.
Потом даем имя созданной программе и выбираем место на диске, куда она будет сохранена.
Перед вами появится код базовой программы, выводящий в консоль фразу «Hello World». Стираем его.
Затем добавляем переменные с помощью встроенного типа int. Например, int a = 10, int b = 20.
Создаем переменную resultSum для сложения, введя код int result = a + b.
А затем вписываем Console.WriteLine(resultSum) и Console.ReadKey().
Ваша программа выведет в консоль результат вычисления (в нашем случае 30). Можно заменить переменные, добавить результат деления, умножения и т.п. В общем, усложнить код как вздумается.
На этом все. Базовое знакомство с C# завершено. Теперь вы знаете, где учить язык, для чего он нужен и как сделать хотя бы маленькую, но рабочую программу. Дальше дело за опытом и упорным обучением.










