No Image

C sharp отличие от c

СОДЕРЖАНИЕ
223 просмотров
10 марта 2020

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа) , делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.

Закрыт 4 года назад .

И еще, на Microsoft Visual Studio на C# программируют?

7 ответов 7

Если абстрагироваться от синтаксиса, то у C# и C++ есть несколько кардинальных отличий:

  1. C# (также как и J#, VB# и проч.) работает поверх некой виртуальной машины которая называется dot NET Framework. То есть объектный код C# генерирует коды для виртуальной (а не физической машины). Соответственно, там где есть эта виртуальная машина объектник C# будет работать везде – это свойство называется кроссплатформенностью, частным следствием этого является то что размеры типов C# фиксированы. С++ собирает объектный код для конкретной платформы: Windows x86, Windows x64, Linux, Sparc и т.д. Причем везде размеры типов и endianness – очередность битов разные, так что при переносе кода между платформами постоянно возникают проблемы.
  2. В С# автоматизирована проблема деаллокации объектов (т.н. сборщик мусора). В идеале прогер только создает объекты, а уже сборщик мусора сам разбирается кого и когда уничтожить. В С++ напротив проблема управления памятью вся возложена на прогера. Это в общем то целая наука как правильно управлять памятью, чтобы не было ее утечки.

Конечно, есть и более тонкие отличия – но это уже детали. Основные отличия я указал.

Читайте также:  Яндекс музыка платная или бесплатная

Тут все пишут про отличия. Рискну написать про сходства.

Во-первых, о чём бы ни писала Елена и Си++ и C# – оба языки общего назначения. Даже больше, оказывается – C# ни разу не заточён под объёмную библиотеку (или фреймворк) .NET, однако с ним намного, много проще. Но если таки учитывать .NET, то для Си++ есть Boost и Qt, так что здесь скорее паритет – библиотек для обоих хватает.
Во-вторых, сложность разработки на Си++ часто преувеличена. Разве только дисциплины надо поболее – выстрелить в ногу здесь попроще. Однако при этом Си++ будет чутка более гибкий и без танцев с бубнами unmanaged код не запустить на C#. Если внезапно потребуется.
В-третьих, оба языка, раз они общего назначения, таки мультипарадигмальные. То есть они реализуют большинство практик. И хотя Си++ развивается довольно медленно, сейчас Си++ резко догнал C# в плане нереализованных фич (здесь как минимум лямбды). Ну и метапрограммирования у Си++ поболее будет (наглая ложь).
В-четвёртых, оба языка кроссплатформеные. Впрочем, C# будет более кроссплатформенный, чем Си++. Разве только тот же Qt резко стёр границы, но это не значит почти ничего – C# компилируется в тот же самый CIL для всех платформ, Си++ – в совершенно разный код для разных платформ (i386, amd64, ARM Cortex-AXX).
Наконец, в пятых, синтаксис у них действительно очень похож. Оба языка принадлежат к семейству Алгол-подобных, так что и брейсы, и остальные скобки здесь имеют примерно одно предназначение.

Различия, которые казалось бы делают языки совершенно разными, таки не столь принципиальны на том уровне абстракции, на котором был задан вопрос. А различия действительно колоссальны: C# – managed код, что означает, что скомпилированный код будет исполнятся не на прямую в CPU, а на специальной виртуальной машине. Это съедает производительность, но сильно облегчает перенос кода. Ну и потом, C# – полупроприетарный ответ Java (что интересно, так как получается, что C# – более свободный, чем Java), которая была создана как замена сложному и небезопасному C++ в том числе.

Читайте также:  1С документооборот не приходят уведомления на почту

В общем, как человек, который начал давно с C#, продолжив C++ и по пути изучив Python, Java, D и другую ООП-чушь могу с уверенностью сказать, что разницы в общем-то и нет. То есть придётся немного проникнуться в чуть другую философию и выяснить, какие проблемы более новый язык пытался решить. Но если подходить к этому, как подошёл lookid, то это скорее не как изучать языки одной языковой группы, а как изучать один и тот же язык в разное время или в разных сферах.

Почему так? Потому что ООП. Оно как бы ООП, ничего сверхъестесственного ни один язык не предлагает, это не Haskell, и тем более не Brainfuck. Так что принципиально общие вещи в них будут. То подмножество, что реализует машину Тьюринга – у них общие. Сами посмотрите: циклы, ветвления, передача аргументов, арифметика. С небольшими правками всё совершенно одинаковое. Да, Дмитрий совершенно прав, traits на C# не повторишь, ибо та аналогия будет уже не traits, однако. Это уже [programming_language] related, то есть это попытка совладать с особенностями.

Немного пруфов: лично я ходящий пруф. Зная C++ и C# и немного Java я просто начал программировать на Python. При том, что Python даже алголоподобным не принадлежит. А всё потому, что логика одна и та же, хотя различий между Python и C(++|#) намного, много больше. Но не читая почти никаких туториалов, пройдясь галопом по европам с документацией сейчас я знаю python достаточно для серьёзного проекта.

UPD. По поводу метапрограммирования. Таки рантайм рефлекшн шарпа тащит. И хотя ни макросов, ни шаблонов, ничего. Но изменять код на лету – это уже очень круто. По дефолту плюсы так не умеют, и хотя шаблоны с макросами тащат, сильно, очень сильно тащат и вытаскивают его, Си++, со дна, надо признать – рефлешн у шарпа будет поинтереснее. Извиняюсь за дезу.

Комментировать
223 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector