Введение

Сравнение двух языков программирования C# и Visual Basic NET являются двумя основными языками, используемыми для программирования на NET Framework.

История языков

C# и VB. NET - это синтаксически очень разные языки с очень разной историей. Как следует из названия, синтаксис C# основан на языке программирования C, первоначально разработанном Деннисом Ричи в Bell Labs (AT&T) в 1970-х годах. Java и C++ - это два других языка программирования, синтаксис которых также основан на синтаксисе C, поэтому они имеют общий внешний вид и ощущение. См. сравнение Java и C Sharp для получения дополнительной информации по этой теме. Корни BASIC уходят в Дартмутский колледж. BASIC (Beginner's All purpose Symbolic Instruction Code) был разработан в 1960-х годах как метод преодоления трудностей использования языка сборки, написанного для конкретных процессоров и / или конкретных брендов мейнфрейм и аппаратного обеспечения. Программирование было зависимо от аппаратного обеспечения по дизайну больше по маркетинговым причинам, чем для сохранения логической композиции программирования, которая должна была выходить за рамки аппаратного обеспечения. (Требование Microsoft прославиться своей операционной системой заключалось в том, чтобы освободить потребителей от аппаратных специальных устройств, инкапсулируя эти задачи в своей операционной системе.) Код стал "портативным" благодаря компилятору, и фактически, как Visual Basic NET, так и C# используют сегодня тот же CLR (Common Language Runtime). Microsoft и HP были заинтересованы в создании ISO-стандарта языка, который был первоначальной целью, однако; HP отказалась от поддержки, и ISO-компьютерный язык никогда не материализовался в качестве международного стандарта. ВБ. NET берет свое начало в BASIC. В начале BASIC использовался в колледже как "основной" язык для первого знакомства с компьютерным программированием, и акроним точно представлял язык. В 1970-х годах язык был взят производителями микрокомпьютеров той эпохи, чтобы использоваться как простой встроенный в ROM язык программирования, так и квази-операционная система для управления вводом / выводом. В начале 1980-х годов язык был взят Microsoft и значительно расширен за пределами его первоначального намерения в их "Visual Basic" язык / платформа, которая была продана на протяжении 1990-х годов как "быстрое приложение разработки" (RAD) инструмент для программирования Windows. Он напрямую конкурировал с другими инструментами RAD 1990-х годов, такими как PowerBuilder. Несмотря на то, что Visual Basic была успешной платформой разработки, она была прекращена после ее 6-й версии (VB6), когда Microsoft представила NET Framework и связанную с ней платформу разработки Visual Studio в начале 2000-х годов. В то время текущие языки C++ и VB6 использовались Microsoft в качестве основы для двух новых языков программирования в их новой "Интегрированной среде разработки (IDE) ". Эти языки получили названия C# и VB. Нет. В феврале 2017 года Microsoft сообщила о своем намерении положить конец стратегии "совместной эволюции" между двумя языками, которая существовала с 2010 года, и позволить двум языкам снова развиваться независимо друг от друга. C# теперь является доминирующим языком разработки на основе Microsoft. Разработчики заметили, что VB 15 (впервые появившийся в Visual Studio 2017) не имеет определенных языковых возможностей, содержащихся в новом C # 7.3.

Сравнение языков

Хотя C# и VB. Microsoft разработала оба этих языка, чтобы быть частью одной платформы разработки NET Framework. Они оба разработаны, управляются и поддерживаются одной и той же командой разработчиков языков в Microsoft. Они компилируются на том же промежуточном языке (IL), который работает на тех же библиотеках времени выполнения NET Framework. Хотя существуют некоторые различия в конструкциях программирования (обсуждаемые далее ниже), их различия в основном синтаксические и, предполагая, что можно избежать библиотеки Visual Basic "Compatibility", предоставляемых Microsoft для помощи в конверсии с VB6, почти каждая команда в VB имеет эквивалентную команду в C # и наоборот. Наконец, оба языка ссылаются на одни и те же базовые классы NET Framework для расширения их функциональности. В результате, за редким исключением, программа, написанная на любом языке, может быть запущена через простой преобразователь синтаксиса для перевода на другой. Для этой задачи существует множество открытых и коммерчески доступных продуктов. Единственные фундаментальные различия между языками можно найти в реализации интерфейсов и в декларировании, поднятии и обработке событий. Хотя оба языка являются языками программирования высокого уровня, VB. В некоторых аспектах NET сохраняет немного более высокий уровень абстракции.

Поддержка многоязычных программ в режиме выполнения

Одной из главных целей NET была его многоязычная поддержка. Целью дизайна было то, чтобы все различные языки Microsoft имели одинаковый уровень доступа ко всем функциям ОС, могли демонстрировать одинаковый уровень мощности и удобства использования и упрощать вызов из модуля на одном языке в модуль, написанный на другом языке. В реализации все языки программирования NET используют один и тот же движок времени выполнения, единое абстрактное синтаксическое дерево и общий промежуточный язык. Кроме того, все языки NET имеют доступ к функциям платформы, включая сбор мусора, кросс-языковое наследование, обработку исключений и отладку. Это позволяет создавать один и тот же исходный двоичный код из любого языка программирования NET.

Другие характеристики C#, не применимые к Visual Basic .NET

По умолчанию числовые операции не проверяются. Это приводит к немного более быстрым кодам, при этом существует риск того, что числовые переполнения не будут обнаружены. Однако программист может поместить арифметические операции в проверенный контекст, чтобы активировать проверку переполнения. (Это можно сделать в Visual Basic, отметив опцию) Идентификаторы C# чувствительны к большому и меньшему знакам. Чтобы назначить одно и то же значение нескольким переменным, вы можете использовать a=b=c.

Сравнение синтаксиса

Visual Basic NET завершает блок кода с инструкциями End BlockName (или Next, для цикла for), которые более знакомы программистам с опытом использования T SQL. В C# скобки {} используются для разграничения блоков, что более знакомо программистам с опытом работы в других широко распространенных языках, таких как C++ и Java. Кроме того, в C#, если блок состоит только из одного предложения, скобки могут быть опущены. C# чувствителен к большому и меньшему, а Visual Basic NET - нет. Таким образом, в C# возможно иметь две переменные с одинаковым видимым именем, например переменная1 и переменная1. Visual Studio исправит (унифицирует) случай переменных, как они вводятся в VB. Нет. Однако в некоторых случаях чувствительность к каждому случаю может быть полезной. Программисты C# обычно заглавляют имена типов и членов и оставляют имена полей и переменных в малых буквах. Это позволяет, например, довольно естественное наименование аргументов метода: public int CalculateOrders ((Customer customer). Это может, однако, вызвать проблемы для тех, кто преобразует код C# в язык, не чувствительный к большим и малым буквам, такой как Visual Basic, или для тех, кто не привык читать язык, чувствительный к большим и малым буквам.

Усыновление и поддержка со стороны сообщества

И C# и VB. В настоящее время Microsoft поддерживает разработчиков из разных областей. Разработчики .NET Framework широко используют оба VB. NET и C# в качестве основных языков. Индекс программирования сообщества TIOBE показывает, что VB. NET превзошёл C# в 2018 году Оригинальный разработчик языка C#, Скотт Вильтамаут, заявил в блоге в марте 2010 года, что "самые надежные цифры, которые у нас есть, показывают примерно равное принятие" для VB. NET и C#. Опрос 2007 года Forrester Research показал, что 59% разработчиков NET использовали только VB. NET для создания программного обеспечения. Visual Basic Express является самой популярной загрузкой из всех загрузок Visual Studio Express. Стивен Уайли, менеджер по маркетингу в Apress сообщил, что "игры на C# продаются больше, чем VB. "Объем продаж книг в сети Интернет составляет от 2 до 3 процентов".

C++/CLI (ранее Managed C++)

C++/CLI (замена Managed Extensions для C++) не имеет такой скорости внедрения, как C# или VB. Но у него есть значительные последователи. C++/CLI синтаксически, стилистически и культурно ближе всего к C#. Однако C++/CLI остается ближе к корням C++ чем C#. C++/CLI непосредственно поддерживает указатели, деструкторы и другие небезопасные концепции программ, которые не поддерживаются или ограничены в других языках. Он позволяет использовать как код NET, так и стандартный код C++. C++/CLI используется для переноса нативных/устаревших приложений C++ в структуру NET или в случаях, когда программист хочет взять под контроль код; но это управление имеет значительную стоимость простоты использования и читаемости. Многие автоматизированные инструменты, которые поставляются с Visual Studio, имеют уменьшенную функциональность при взаимодействии с кодом C ++. Это потому, что отражение не может предоставить столько информации о коде, сколько это возможно для C # и VB. Чистая

Я -

Джей-Джей занимает четвёртое место по количеству усыновленных. J# - это язык, в первую очередь предназначенный для облегчения перехода приложений Java в NET-фреймворк; он позволяет разработчикам оставлять большую часть своего кода Java или J++ без изменений, пока он все еще работает в NET-фреймворке, что позволяет им мигрировать небольшие его части в другой язык NET, такой как C#, индивидуально. J# не получает такого же уровня обновлений, как другие языки, и не имеет такого же уровня поддержки сообщества. Например, Visual Studio 2005 Team System поддерживает автоматическое генерацию Unit Tests в C#, VB. Net и C++, но исключает J#. J# был прекращен и не включен в Visual Studio 2008 или более новые версии, поскольку существующий набор функций J# в значительной степени удовлетворяет потребностям клиентов, а использование J# сокращается.

Дополнительные языки .NET

Все языки NET компилируются до общего промежуточного языка (CIL), который содержит богатые метаданные и функционально и логически эквивалентен исходному языковому коду NET. По этим причинам, хотя возможно кодировать непосредственно в CIL, это делается редко. Эквивалентность CIL с языковым кодом NET позволяет таким инструментам, как NET Reflector, преобразовывать сборку NET в исходный код, который почти идентичен исходному коду. Для защиты от этого часто используются обфускаторы кода, которые непосредственно изменяют CIL сборки, чтобы затруднить или сделать невозможным декомпилирование на язык NET более высокого уровня.