Другие языки программирования и технологии

Чем отличается С# от C++?

C# полностью объектно-ориентированный (нельзя создать отдельно переменную или функцию, всё только через классы) + много классов
Алексей Дорошин
Алексей Дорошин
46 800
Лучший ответ
Примерно тем же, чем и Java от C++
С# исполняется под виртуальной машиной .NET.
На сравнение синтаксиса много времени уйдет.
По разному работает обработка исключений.
Есть такие моменты как сборка мусора в .NET. Работа с указателями вообще по другому принципу строится.
Правда есть много и схожего. Но, думаю, C# больше все таки сход с Java чем с C++.
В С++ компиляция под конечный процессор, в C# в промежуточный байт-код, и потом в Just-In-Time в нативный по ходу выполнения.
Это совсем разные языки. И у них совсем разные задачи. Хотя есть у MS C++ и под .NET. Смесь нативного и управляемого кода.
Можно еще много написать на эту тему. Но лучше все таки инфу в инете поискать.
Виталий Волков
Виталий Волков
24 293
C# - управляемый язык (есть ещё managed C++). Очень похож на Java, тоже есть байт-код,
тоже выполняется на виртуальной машине, тоже есть сборка мусора, тоже нет явного освобождения памяти,
тоже (даже более) объектно-ориентированный. . в общем-то, список гораздо больше, это основное.
С++ ANSI99(не .NET)
0. С# интерпретируются в MSIL(промежуточный язык в .NET все языки под .NET сначал интерпритируются в него) потом при первом выполнении CLR компилирует в машинный кодсоответсвующей архитектуры. В теории такой подход даёт сильную оптимизацию машинного кода под соответсвующую архитектуру на практике подтверждений, что это как-то улучшает работу не встречал.
1. В С++ есть понятия union (объединения) - в С# такого нет
Это к плюсом плюсов отнести не могу, т. к. ни разу не использовал и не буду.
2. В С++ поддерживается множественное наследование классов в С# множественного наследования нет. В С# есть множественно насследование интерфейсов ( то же самое, что и класс со всеми чисто виртуальными методами (vitual void func()=0) в шарпе ключевое слово abstract)
3. В С++ есть friend методы и классы. Опять же ни разу не использовал
4. В С# все типы-структуры или классы ну и т. д. , свободных методов нет
5. Все типы в .NET, а значит и в C#, в методанных содержат полную информацию о себе, поэтому их очень легко дизасемблировать.
6. В C++ модификатроы доступа пишутся для групп, в С# для каждого поля
7. В С++ поля без модификатора ( в самом начале) описания типа по умолчанию private для классов, public для struct и union. В С# вроде для всех private :)))
8.В С++ происходит прямая работа с памятью, в C# можно забыть о том, что любой тип что-то занимает в памяти ( работает GC Garbage Collector) это ведёт к наплеванию на экономию ресурсов у программеров.
9. В С# все типы наследники ValueType расположенны в стеке, остальные в управляемой куче. В C++ как расположишь.
10. В .NET Модель событий основанна на делегатах, что ну просто мега удобно, в С++ messagemap, что гораздо менее удобно.
11. В С# 3.0 упрощенна работа со свойствами просто пишешь public String prop{get;set;}, а потом это счастье компиляется в
private String _prop
public String prop
{
get {return this._prop;}
set {this._prop=value;}
}
Т. о. пока мудростей нет можно сделать автоматическое свойство, потом в это свойство добавить какую-нибудь логику, при этом никто использующий тип даже и не заметит.
12. В С# 3.0 поддержка LINQ. В кратце можно с помощью этой чтуки сделать запрос к любым поддерживаем источникам (XML, SQL Server, Oracle, Sqlite(надо скачивать и ставить. )
13. В С# 3.0 поддержка расширяемых методов и любда выражений
14. В С++ есть шаблоны, в С# Generic-и. Из-за особеноостей компиляции С# тут явно в выигрыше.
15. ..

Всё что умеет или не умеет C# умеет или не умеет C++(кроме нюансов со структурами и union) под .NET, правда С++ это исключтиельный язык в одном проекте может быть как и managment C++, так и ANSI99 C++

Итог: С++ конечно круто, но я больше люблю C#, на нём быстрее и понятнее
Жолдас Утаров
Жолдас Утаров
1 538
Жангелды Кудабаев 1) union крайне полезная вещь в целях экономии памяти, так что зря
2) По-моему это вообще самый большой минус C#, т. к. без множественного наследования вообще некуда (например, накрываются потоки воода вывода, которые наследую одновременно от потоков ввода и потоков вывода)
3) friend`ы очень полезны. Без них, скажем не реализуешь по-хорошему оператор, у которого данный класс правый операнд.

8) Кто-то из великих сказал: "Лучше всего сборка мусора реализована в тех языках, в которых нет мусора. Например в C++".

14) Про generic я не знаю, но не могу представить, что можно создать что-то более гибкое изящное и применимое, чем шаблоны C++

15) C++ это не майкросовтовское фуфло, это язык, у которого есть Стандарт, что относят к его основным преимуществам. И когда в следующем году выйдет новый Стандарт, которого все так ждут, C++ оставит все C#, и т. п. далеко позади, впрочем им и сейчас до него далеко.
Владислав Дергунов Да, ребята. Интересно стану ли я таким,как вы. Я просто не понимаю о чём вы.
Завидую.