Разница в них в уровне программирования. С++ - низкоуровневый язык, С# более высокоуровневый. И операционные системы с драйверами пишутся на С/С++ не потому, что они быстрые, а потому что это низкоуровневые языки, что подразумевает управление железом и памятью напрямую. В более высокоуровневых языках таких возможностей просто нет, как собственно и нету в чистом виде как таковых указателей и встроен посему сборщик мусора.
Говорить о схожести языков, основываясь на том что у них похожий синтаксис неправильно, в таком случае большинство широкоиспользуемых ЯПов "схожи", а вообще у них схожий "си-образный" синтаксис.
Помимо разницы в уровне языка, присутствует также определенный порог вхождения в стандартную библиотеку языка, в случае шарпа - .Net Framework, в случае с++ - STL. И тут общего практически ничего нет, кроме может быть каких-нибудь абстрактно-базовых реализаций.
Ну и как правильно было замечено в идеологии разница тоже есть. Эти языки мыслят немного разными категориями и понятиями. Когда пишешь на шарпе о памяти задумаваешься в очень рарных ситуациях, а в крестах ты об этом думаешь всегда даже, когда в классе поля объявляешь. Мне сейчас очень сложно переходить на С++ после постоянной работы с шарпом в течение последних 7 лет, мозг абсолютно в другую сторону вывернулся за эти годы