Скажем так:
C
и C#
похожи как rm -rf . /
и # rm -rf . /
похожи
Короче говоря, никакой C не является подмножеством C #. Внешний вид многих управляющих структур основан на C. Например, for-loop, switch, while и так далее. В то же время C # запрещает потенциально опасные конструкции, такие как выпадение регистра в переключателе, когда забываете разрыв; или помещать целое число как условие if, где ожидается логическое значение. Приведенная выше цитата означает, что C # и C могут выглядеть очень похожими, но приводить к совершенно разным результатам. Если C не помешает вам удалить все из вашего раздела, C # защитит вас от этого по ошибке, образно говоря.
На другом уровне C позволяет вам приводить указатели к целым числам, перемещать их по кругу, приводить назад и затем получать доступ к ячейкам памяти, которые затем сохраняются в этом указателе. C не защитит вас от доступа к памяти, которая не выделена вами. Вы получите крах - в лучшем случае. C # - с другой стороны - будут исключения, которые замечают вас, когда вы делаете такие вещи, как доступ к объекту через нулевую ссылку.