Сравнение C Sharp и Visual Basic .NET - Comparison of C Sharp and Visual Basic .NET
C # и Visual Basic .NET два основных языка, используемых для программирования на .NET Framework.
История языка
C # и VB.NET - синтаксически очень разные языки с очень разной историей.
Как следует из названия, синтаксис C # основан на ядре Язык программирования C первоначально разработан Деннис Ричи в Bell Labs (AT&T) в 1970-х годах.[1] Ява и C ++ - два других языка программирования, синтаксис которых также основан на синтаксисе C,[2] поэтому они имеют общий внешний вид. Видеть Сравнение Java и C Sharp для получения дополнительной информации по этой теме.
BASIC берет свое начало в Дартмутский колледж.[3] БАЗОВЫЙ (Универсальный символьный код инструкций для начинающих) был разработан в 1960-х годах как метод преодоления трудностей, связанных с использованием языка ASSEMBLY, написанного для мэйнфреймов и оборудования для конкретных процессоров и / или конкретных торговых марок. Программирование зависело от аппаратного обеспечения в большей степени из маркетинговых соображений, чем для сохранения логической композиции программирования, которая должна выходить за рамки аппаратного обеспечения. (Претензия Microsoft на известность благодаря своей операционной системе заключалась в том, чтобы освободить потребителей от аппаратных устройств, инкапсулируя эти задачи в свою операционную систему.) Код стал «переносимым» благодаря компилятору, и, фактически, и Visual Basic .NET, и C # используют тот же CLR (Common Language Runtime) сегодня. Microsoft и HP были заинтересованы в создании стандартного языка ISO, что, однако, было первоначальной целью; HP отказалась от поддержки, и компьютерный язык ISO так и не стал международным стандартом.
VB.NET берет свое начало в БЕЙСИКЕ. Вначале BASIC использовался в сообществе колледжей как «базовый» язык для первого знакомства с компьютерным программированием, и аббревиатура точно представляла язык. В 1970-х годах этот язык был подхвачен производителями микрокомпьютеров той эпохи для использования как в качестве простого встроенного языка программирования ПЗУ, так и в качестве квазиоперационной системы для управления вводом / выводом. В начале 1980-х годов этот язык был подхвачен Microsoft и значительно расширен за пределы его первоначального замысла в их язык / платформу «Visual Basic», которые продавались на протяжении 1990-х годов как инструмент «быстрой разработки приложений» (RAD) для программирования Windows.[4] Он напрямую конкурировал с другими инструментами RAD 1990-х, такими как PowerBuilder.[5] Несмотря на то, что Visual Basic был успешной платформой разработки, он был прекращен после его 6-й версии (VB6), когда Microsoft представила .NET Framework и связанную с ней платформу разработки Visual Studio в начале 2000-х годов. В то время текущие языки C ++ и VB6 использовались Microsoft в качестве основы для двух новых языков программирования в своей новой «интегрированной среде разработки (IDE)». Эти языки получили названия C # и VB.NET.
В феврале 2017 года Microsoft сообщила о своем намерении положить конец стратегии «совместной эволюции» двух языков, существовавшей с 2010 года, и позволить двум языкам снова развиваться независимо. C # в настоящее время является доминирующим языком разработки на базе Microsoft. Разработчики заметят, что в VB 15 (впервые появившемся в Visual Studio 2017) отсутствуют определенные языковые возможности, содержащиеся в новом C # 7.3.[6]
Сравнение языков
Хотя C # и VB.NET синтаксически сильно различаются, на этом различия в основном заканчиваются. Microsoft разработала оба этих языка как часть одной платформы разработки .NET Framework. Оба они разрабатываются, управляются и поддерживаются одной и той же группой разработчиков языков в Microsoft.[7] Они компилируются на один и тот же промежуточный язык (IL), который работает с одними и теми же библиотеками времени выполнения .NET Framework.[8] Хотя есть некоторые различия в конструкциях программирования (обсуждаемых ниже), их различия в основном синтаксические и, если предположить, что один из них избегает библиотек «совместимости» Visual Basic, предоставляемых Microsoft для облегчения преобразования из VB6, почти каждая команда в VB имеет эквивалентную команду. в C # и наоборот. Наконец, оба языка ссылаются на одни и те же базовые классы .NET Framework для расширения своей функциональности. В результате, за некоторыми исключениями, программу, написанную на любом языке, можно запустить с помощью простого преобразователя синтаксиса для перевода на другой. Для этой задачи существует множество продуктов с открытым исходным кодом и коммерчески доступных продуктов. Единственные фундаментальные различия между языками можно найти в реализации интерфейсов, а также в объявлении, возбуждении и обработке событий. Хотя оба языка языки программирования высокого уровня, VB.NET в некоторых отношениях поддерживает немного более высокий уровень абстракции.
Поддержка нескольких языков во время выполнения
Одной из основных целей .NET была его многоязычная поддержка. Цель дизайна заключалась в том, чтобы все различные Microsoft языки должны иметь одинаковый уровень доступа ко всем Операционные системы функции, должны иметь такой же уровень мощности и удобство использования, и упростить вызов модуля на одном языке до модуля, написанного на другом языке.
В реализации все языки программирования .NET используют один и тот же механизм выполнения, унифицированный абстрактное синтаксическое дерево, и Общий промежуточный язык. Кроме того, все языки .NET имеют доступ к функциям платформы, включая сборку мусора, межъязыковое наследование, Обработка исключений, и отладка. Это позволяет создавать один и тот же выходной двоичный файл на любом языке программирования .NET.
Среда разработки
Visual Studio предоставляет незначительные различия в среде разработки для C # и VB.Net. С каждым последующим выпуском Visual Studio различия между средами разработки для этих языков уменьшались. Например, ранние версии Visual Studio плохо поддерживали Intellisense в C # по сравнению с Visual Basic .NET и не предлагал фоновую компиляцию для C #.[9] В настоящее время основные отличия в средах разработки заключаются в дополнительных функциях Visual Basic .NET, которые возникли в VB6, в том числе:
- Пространство имен по умолчанию скрыто (но может быть отключено)
- Некоторые файлы проекта скрыты (пользователь может их показать)
- Автоматически созданный
Мой.*
пространства имен содержат множество часто используемых ярлыков, перенесенных из VB6, таких как методы работы с реестром и файлом конфигурации приложения.
Фоновая компиляция - это функция Visual Studio IDE при этом код компилируется так, как он написан программистом, с целью выявления ошибок компиляции без необходимости создания решения. Эта функция была доступна для Visual Basic начиная с .NET 1.1 и присутствовала в ранних версиях Visual Studio для Visual Basic .NET. Однако фоновая компиляция является относительно новой концепцией для Visual C # и доступна с пакетом обновления 1 для Visual Studio 2008 Standard Edition и выше. Явным недостатком C # является то, что панель «Список ошибок» не обновляется, пока решение не будет перестроено. Рефакторинг больших проектов на C # затруднен из-за необходимости часто перестраивать решение, чтобы выявить ошибки компиляции.[10] В Visual Basic дело обстоит иначе, поскольку панель «Список ошибок» синхронизируется с фоновым компилятором.
Фоновая компиляция менее требовательна к системным ресурсам и сокращает циклы сборки.[10] Это особое преимущество для больших проектов, которое может значительно сократить время, необходимое для начала отладки в среде IDE.[10]
Особенности языка
Основная часть различий между C # и VB.NET с технической точки зрения заключается в синтаксический сахар. То есть большинство функций есть на обоих языках, но некоторые вещи легче сделать на одном языке, чем на другом. Многие различия между двумя языками на самом деле связаны с IDE.
Возможности Visual Basic .NET, отсутствующие в C #
- Переменные можно объявлять с помощью
WithEvents
построить. Эта конструкция доступна для того, чтобы программист мог выбрать объект из Имя класса раскрывающийся список, а затем выберите метод из Декларации раскрывающийся список, чтобы иметь Подпись метода автоматически вставлен - Автоподключение событий. VB.NET имеет
Ручки
синтаксис для событий, который связывает обработчики событий с объектными переменными, а не с объектами. - Запуск событий осуществляется с помощью
RaiseEvent
ключевое слово, дающее IDE возможность показать список доступных событий для выбора.RaiseEvent
неявно проверяет, подключены ли какие-либо обработчики событий. (в C # создание события синтаксически идентично вызову процедуры и требует дополнительной строки кода для проверки подключенных обработчиков событий) - Делегатов на мероприятия объявлять не нужно. Они неявно декларируются в объявлении событий.
- Обращение к объекту с использованием неквалифицированной точечной ссылки с использованием
С ... Закончить с
структура - XML-литералы[11]
- Встроенные объявления даты, например
#12/31/2000#
Модуль
(хотя статические классы C # с дополнительной семантикой, но каждое поле должно быть индивидуально объявлено как статическое)- Члены
Модуль
s, импортированные в текущий файл, могут быть доступны без предшествующего средства доступа к контейнеру[12] - В
Мой
пространство имен.[13] - Компоненты COM и совместимость были более мощными в VB.NET, так как тип Object привязывается во время выполнения;[14] однако C # 4.0 добавил
динамичный
type, который функционирует как форма объекта с поздним связыванием - Пространства имен можно импортировать на уровне проекта, поэтому их не нужно импортировать в каждый отдельный файл, как в C #.
- Определение условных констант компилятора
- Методы свойств могут принимать параметры
- Свойства могут быть переданы в методы с
ByRef
параметры (ссылка
параметры в C #). В C # вам нужно написать три дополнительные инструкции: объявить переменную, скопировать значение свойства в переменную и скопировать переменную обратно в свойство после вызова метода. Enum
s можно определить внутри интерфейсовДело
операторы могут содержать выражения неравенства, напримерЭто> = 3
. (в C # это можно имитировать вложеннымиЕще
иЕсли
заявления)Перегрузки
ключевое слово указывает, что свойство или процедура повторно объявляют одно или несколько существующих свойств или процедур с тем же именем в том же классе или базовом классе. (отсутствие этого ключевого слова в C # может привести к непреднамеренной перегрузке)Орудия
ключевое слово, чтобы указать, какие интерфейсы реализует член класса. В C # существует аналогичный синтаксис, но он не является обязательным и может применяться только в том случае, если член реализует единственный интерфейс.Нравиться
оператор для сравнения шаблонов строк намного проще, чем использование регулярных выражений. (в C # то же самое доступно с методом Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString, но не в качестве удобного ключевого слова языка)Возвращаться
заявление не требуется. Возврат также можно выполнить, присвоив значение функции- Visual Basic имеет встроенные константы вроде
vbCrLf
иvbTab
- Нет
из
модификатор параметра существует, потому что в VB все переменные инициализируются автоматически. - В
Мой класс
ключевое слово ведет себя как объектная переменная, относящаяся к текущему экземпляру класса, как изначально реализовано.Мой класс
похоже наМне
, но все вызовы его методов обрабатываются так, как если бы этот метод был NotOverridable. MyBase.New
используется для явного вызова конструктора базового класса из конструктора производного класса.- В
Мой
Эта функция обеспечивает простой и интуитивно понятный доступ к ряду классов .NET Framework, позволяя пользователю Visual Basic взаимодействовать с компьютером, приложением, параметрами, ресурсами и т. д. - Локальные переменные (т.е. переменные, объявленные внутри процедуры) инициализируются автоматически.
- Локальные переменные можно объявить с помощью
Статический
модификатор, чтобы сохранить их значение между вызовами процедуры. - В
Дефолт
объявление делает свойство индексом и может использовать более короткий синтаксис для извлечения коллекции, напримерМоя коллекция (5)
. В C # есть аналогичная конструкция с повторным использованием ключевого словаэто
как название собственности. Несколько индексаторов могут быть объявлены с использованием ключей разных типов, например.Моя коллекция (5)
или жеMyCollection ("Боб")
. - C # не хватает
DirectCast
(сопоставление с одной инструкцией CLR), строгое преобразование типов может быть достигнуто с помощьюв качестве
оператор, который включает дополнительную защиту от ошибок во время выполнения. - C # не хватает
Конец
оператор, который внезапно завершает приложение. - Вывод лямбда-выражений
Dim x = Функция (n как целое число) n + 1
Возможности C #, отсутствующие в Visual Basic .NET
- Многострочные комментарии. В VB это обрабатывается в редакторе IDE Visual Studio, который добавляет маркеры комментариев к выборкам.
- Статические классы (классы, которые не могут содержать никаких нестатических членов, хотя модули VB.NET по сути являются статическими классами с дополнительной семантикой)
- Можно использовать
проверил
ине отмечен
контексты для детального контроля проверки переполнения / потери значимости - Итеративные циклы for могут содержать несколько условных выражений, например
for (int i = 0; i <10 && somethingTrue; i ++)
. Это наследие C, гдеза
оператор - это в основном синтаксический сахар дляпока
утверждение. - Получатель и установщик свойства могут реализовывать отдельные интерфейсы. В VB вам придется вместо этого определить два свойства: свойство только для чтения, реализующее один интерфейс, и свойство только для записи, реализующее другой интерфейс.
- Неявная реализация интерфейса
- Можно использовать оператор объединения
??
чтобы вернуть первое ненулевое значение (например,ноль ?? ноль ?? 1
возвращается1
). VB.NET придется использоватьЕсли
функция с двумя параметрами - например,Если (Ничего, Если (Ничего, 1))
возвращается1
. - Указатели (в небезопасном контексте)
- Условный оператор?:
(someThingTrueOrFalse)? whenTrue (): whenFalse ();
. VB.NET придется использоватьЕсли
функция с тремя параметрами - т.е.Если (someThingTrueOrFalse, whenTrue (), whenFalse ())
.
Другие характеристики Visual Basic .NET не применимы к C #
- Преобразование логического значения True в Integer может дать -1 или 1 в зависимости от используемого преобразования
- Для присвоения и сравнения переменных используется один и тот же токен:
=
. В то время как C # имеет отдельные токены,==
для сравнения и=
присвоить значение - Идентификаторы VB.NET не чувствительны к регистру.
- При присвоении значения переменной с другим тип данных (и с
Вариант Строгий
не включен), VB.NET будет принуждать значение, если возможно. Это автоматическое принуждение иногда может приводить к неожиданным результатам, например:
Тусклый я В качестве Целое число = "1" 'Компилятор автоматически преобразует String в IntegerТусклый j В качестве Нить = 1 'Компилятор автоматически преобразует целое число в строкуЕсли я = j потом 'Компилятор приводит и сравнивает между i и j MsgBox(«Избегайте использования, но это сообщение появится!»)Конец Если
Хотя по умолчанию Вариант Строгий
чтобы быть выключенным по причинам обратной совместимости, Microsoft рекомендует[15] и широко считается хорошей практикой превращать Вариант Строгий
включен, так как это увеличивает производительность приложений и снижает вероятность ошибок именования и других ошибок программирования.[16]
Вал ()
функция, которая также анализирует нулевое значение при преобразовании в double (в C #Convert.ToDouble ()
используется для преобразования любого объекта в значение типа double, но вызывает исключение в случае значения NULL)- CInt, CStr, CByte, CDbl, CBool, CDate, CLng, CCur, CObj и широкий спектр функций преобразования, встроенных в язык
Другие характеристики C # не применимы к Visual Basic .NET.
- По умолчанию числовые операции не проверяются. Это приводит к немного более быстрому коду с риском того, что числовые переполнения не будут обнаружены. Однако программист может поместить арифметические операции в проверяемый контекст, чтобы активировать проверку переполнения. (Это можно сделать в Visual Basic, отметив соответствующий параметр)
- Идентификаторы C # чувствительны к регистру.
- Чтобы присвоить одно и то же значение нескольким переменным, вы можете использовать
а = б = с
.
Сравнение синтаксиса
Visual Basic .NET завершает блок кода с помощью Конец BlockName
заявления (или Следующий
заявления, для для цикла ), которые более знакомы программистам, имеющим опыт использования T-SQL. В C # фигурные скобки, {}
, используются для разграничения блоков, что более знакомо программистам, имеющим опыт работы с другими широко распространенными языками, такими как C ++ и Ява. Кроме того, в C #, если блок состоит только из одного оператора, фигурные скобки можно опустить.
C # чувствителен к регистру, а Visual Basic .NET - нет. Таким образом, в C # можно иметь две переменные с одинаковым очевидным именем, например переменная1
и Переменная1
. Visual Studio исправит (сделает единообразным) регистр переменных по мере их ввода в VB.NET. Однако в некоторых случаях чувствительность к регистру может быть полезно. Программисты на C # обычно пишут имена типов и членов с заглавной буквы, а имена полей и переменных оставляют в нижнем регистре. Это позволяет, например, довольно естественным образом именовать аргументы метода: public int CalculateOrders (Клиент-клиент)
. Однако это может вызвать проблемы для тех, кто конвертирует код C # в нечувствительный к регистру язык, такой как Visual Basic, или для тех, кто не привык читать чувствительный к регистру язык.
Ключевые слова
Visual Basic не чувствителен к регистру, что означает, что допустимы любые комбинации букв верхнего и нижнего регистра в ключевых словах. Visual Studio автоматически преобразует все ключевые слова Visual Basic в формы по умолчанию с заглавной буквы, например «Паблик», «Если».
В C # учитывается регистр, а все ключевые слова C # - в нижнем регистре.
Visual Basic и C # разделяют большинство ключевых слов, с той разницей, что дефолт Ключевые слова Visual Basic - это версии ключевых слов C # с заглавной буквы, например Общественные
против общественный
, Если
против если
.
Некоторые ключевые слова имеют очень разные версии в Visual Basic и C #:
Друг
противвнутренний
- модификаторы доступа, разрешающие межклассовые, но не межсборочные ссылки, за исключением дружественных сборокМне
противэто
- ссылка на текущий экземпляр объектаMustInherit
противАбстрактные
- предотвращает создание экземпляра класса напрямую и заставляет потребителей создавать объектные ссылки только на производные классыMustOverride
противАбстрактные
- для принуждения производных классов переопределять этот методMyBase
противоснование
- для ссылки на базовый класс, от которого происходит текущий классNotInheritable
противзапечатанный
- для объявления классов, которые не могут быть унаследованыNotOverridable
противзапечатанный
- для объявления методов, которые не могут быть переопределены производными классамиПереопределяемый
противвиртуальный
- объявляет, что метод может быть переопределен в производных классахОтменяет
противотменять
- для пометки виртуального метода как переопределенногоОбщий
противстатический
- для объявления методов, которые не требуют явного экземпляра объекта
Некоторые ключевые слова C #, такие как запечатанный
представляют разные вещи, когда они применяются к методам, в отличие от того, когда они применяются к определениям классов. VB.NET, с другой стороны, использует разные ключевые слова для разных контекстов.
Эта статья может содержать неизбирательный, излишний, или же не имеющий отношения Примеры.Февраль 2012 г.) ( |
Комментарии
C # | Visual Basic .NET |
---|---|
// Однострочный комментарий/ * Многострочный комментарий строка 2 строка 3 * //// однострочный комментарий XML/ ** Многострочный комментарий XML строка 2 строка 3 * /#if КОММЕНТАРИЙ мульти-линия комментарий через предварительно-обработка линия 2 линия 3#endif | 'Однострочный комментарий'' 'XML-комментарий первой строки'' 'XML-комментарий второй строки'' 'XML-комментарий третьей строкиREM Комментарий#If COMMENT Then мульти-линия комментарий через предварительно-обработка линия 2 линия 3#End If Внутристрочные комментарии недоступны |
Условные
C # | Visual Basic .NET |
если (условие) { // условие верно } еще если (другое условие) { // условие ложно, а другое условие истинно} еще { // условие и другое условие ложны } | Если условие потом 'условие верноElseIf другое условие потом 'условие ложно, а другое условие истинноЕще 'condition и othercondition falseКонец Если |
Петли
C # | Visual Basic .NET |
за (int я = 0; я < номер; ++я) { // цикл от нуля до числа, которое на единицу меньше числа} | За я В качестве Целое число = 0 К номер - 1 'цикл от нуля до числа на единицу меньшеСледующий |
за (int я = номер; я >= 0; --я) { // цикл от числа до нуля} | За я В качестве Целое число = номер К 0 Шаг -1 'циклы от номера до нуляСледующий |
за (int я = 0; я <= 20; я += 2) { // цикл от 0 до 20 по 2} | За я В качестве Целое число = 0 К 20 Шаг 2 'петли от 0 до 20 по 2'sСледующий |
перемена; // выходит из цикла | Выход За 'выходит из цикла for Выход Пока 'выходит из цикла while Выход Делать 'выходит из цикла do |
Сравнение
Примитивные типы
C # | Visual Basic .NET | |
если (а == б) { // равный} | Если а = б потом ' равныйКонец Если | |
если (а != б) { // не равный} Или же: если (!(а == б)) { // не равный} | Если а <> б потом ' не равныйКонец Если Или же: Если Нет а = б потом ' не равныйКонец Если | |
если (а == б & c == d | е == ж) { // логические операторы без короткого замыкания} | Если а = б И c = d Или же е = ж потом 'логические операторы без короткого замыканияКонец Если | |
если (а == б && c == d || е == ж) { // замыкающие логические операторы} | Если а = б А также c = d OrElse е = ж потом 'короткие логические операторыКонец Если | |
Типы объектов
C # | Visual Basic .NET |
если (объект.Ссылка(а, б)) { // переменные относятся к одному и тому же экземпляру} | Если а Является б потом 'Также можно записать как If Object.ReferenceEquals (a, b) Then 'переменные относятся к одному и тому же экземпляруКонец Если |
если (!объект.Ссылка(а, б)) { // переменные не относятся к одному и тому же экземпляру} | Если а Не является б потом 'переменные не относятся к одному и тому же экземпляруКонец Если |
если (а == б) { // экземпляры эквивалентны} | Если а = б потом 'экземпляры эквивалентныКонец Если |
если (а != б) { // не эквивалент} | Если а <> б потом 'не эквивалентКонец Если |
вар тип = тип(int); | Тусклый тип = GetType(Целое число) |
если (а является б) { // типы a и b совместимы} | Если Тип а Является б потом 'типы a и b совместимыКонец Если |
если (!(а является б)) { // типы a и b несовместимы} | Если Тип а Не является б потом 'типы a и b несовместимыКонец Если |
Принятие и поддержка сообщества
И C #, и VB.NET имеют высокие темпы принятия, очень активные сообщества разработчиков и Microsoft полностью поддерживает оба сообщества. .NET Framework разработчики широко используют VB.NET и C # в качестве основных языков.[17][18] Тем не менее, C # имеет больше активности сообщества в Интернете, и существует больше книг по C #. Это может указывать либо на то, что C # все больше используется, либо на то, что пользователям нужна дополнительная помощь.
Примеры принятия сообществом и промышленностью включают:
- Индекс сообщества программистов TIOBE за июль 2010 г. показывает, что C # превзошел Visual Basic[19]
- Индекс сообщества программистов TIOBE показывает, что VB.NET превзошел C # в 2018 году[20]
- Первоначальный разработчик языка C # Скотт Вильтамут заявил в мартовском блоге 2010 года, что «самые надежные данные, которые у нас есть ... показывают примерно одинаковое распространение» для VB.NET и C #.[17]
- 2007 г. Forrester Research опрос показал, что 59% разработчиков .NET использовали Только VB.NET создавать программное обеспечение.[18]
- Visual Basic Express самая популярная загрузка из всех Visual Studio Express скачивает.[21]
- Согласно опросу, проведенному в ноябре 2007 г. Visual Studio Журнал «41 процент сказали, что использовали C #, 34 процента написали на VB.NET, а 25 процентов ответили« другое »».[21]
- Стивен Уайли, менеджер по маркетингу в Apress сообщил, что «Заголовки C # легко превосходят по продажам титульные книги VB.NET, где-то между 2–1 и 3–1».[21]
- Блоги MSDN сайт блогов для сотрудников Microsoft содержит 770 000 сообщений, посвященных C #, в то время как только 378 000 упоминают VB.Net (по состоянию на 4 февраля 2016 г.)[нужна цитата ]
- Группы Google, а Usenet поисковая система возвращает 35 200 000 совпадений для "VB .Net" и 244 000 000 для "C #" (по состоянию на 4 февраля 2016 г.)[нужна цитата ]
- Опрос пользователей разработчиков Stack Overflow 2018 показал, что 35% профессиональных разработчиков использовали C #, в то время как только 6,9% использовали VB.NET.[22]
Другие языки
C ++ / CLI (ранее управляемый C ++)
C ++ / CLI (замена для Управляемые расширения для C ++ ) не имеет такого же уровня принятия, как C # или VB.NET, но имеет значительное число последователей. C ++ / CLI синтаксически, стилистически и культурно ближе всего к C #. Однако C ++ / CLI остается ближе к своим корням C ++, чем C #. C ++ / CLI напрямую поддерживает указатели, деструкторы и другие небезопасно программные концепции, которые не поддерживаются или не ограничиваются на других языках. Он позволяет напрямую использовать как код .NET, так и стандартный код C ++. C ++ / CLI используется для переноса собственных / устаревших приложений C ++ в платформу .NET или случаев, когда программист хочет получить больший контроль над кодом; но этот элемент управления требует значительных затрат, связанных с простотой использования и читаемости. Многие автоматизированные инструменты, поставляемые с Visual Studio, имеют ограниченную функциональность при взаимодействии с кодом C ++. Это связано с тем, что отражение не может предоставить столько информации о коде, сколько для C # и VB.net.
J #
J # занимает четвертое место с точки зрения усыновления. J # - это язык, в первую очередь разработанный для облегчения перехода приложений Java на платформу .NET; он позволяет разработчикам оставлять большую часть своего кода Java или J ++ без изменений, продолжая запускать его в среде .NET, тем самым позволяя им переносить небольшие фрагменты кода на другой язык .NET, например C #, по отдельности. J # не получает того же уровня обновлений, что и другие языки, и не имеет такого же уровня поддержки сообщества. Например, Visual Studio 2005 Team System поддерживает автоматическое создание модульных тестов на C #, VB.Net и C ++, но исключает J #. Поддержка J # прекращена, и он не включен в Visual Studio 2008 или более новые версии, поскольку существующий набор функций J # в значительной степени удовлетворяет потребности клиентов, а использование J # сокращается.
Дополнительные языки .NET
Все языки .NET компилируются до Общий промежуточный язык (CIL), который содержит обширные метаданные и функционально и логически эквивалентен исходному коду языка .NET. По этим причинам, хотя можно кодировать непосредственно в CIL, это делается редко. Эквивалентность кода языка CIL и .NET позволяет использовать такие инструменты, как .NET Reflector для преобразования сборки .NET в исходный код, почти идентичный исходному. Обфускаторы кода часто используются для защиты от этого и действуют путем прямого изменения CIL сборки, чтобы затруднить или сделать невозможным декомпиляцию на язык .NET более высокого уровня.
Рекомендации
- ^ "История". Cm.bell-labs.com. Архивировано из оригинал на 2015-02-03. Получено 2013-08-18.
- ^ «История языка программирования Java». Freejavaguide.com. Получено 2013-08-18.
- ^ "БЕЙСИК в Дартмуте"
- ^ «Рождение Visual Basic». Forestmoon.com. Получено 2013-08-18.
- ^ "История Powersoft История PowerBuilder". Lannigan.org. Получено 2013-08-18.
- ^ «Языковая стратегия .NET». Февраль 2017 г.
- ^ Криль, Пол (27 февраля 2009 г.). "Конвергентные языки программирования Microsoft | Мир разработчиков". InfoWorld. Архивировано из оригинал на 2013-01-26. Получено 2013-08-18.
- ^ «Промежуточный язык Microsoft». Dotnet-guide.com. Получено 2013-08-18.
- ^ Мэтью Герц. «Масштабирование: очень загруженный фоновый компилятор». Журнал MSDN. Архивировано из оригинал на 2008-02-19. Получено 2008-12-16.
- ^ а б c «Система и методология рефакторинга с помощью компилятора». Freepatentsonline.com. Получено 24 февраля 2015.
- ^ Джонатан Аллен. "Нужны ли C # XML-литералы VB9?". Получено 2009-01-13.
- ^ «Свойство DateAndTime.Now (Microsoft.VisualBasic)». Msdn.microsoft.com. 2015-02-18. Получено 2015-02-24.
- ^ «Разработка с помощью My (Visual Basic)». Msdn.microsoft.com. 2015-02-18. Получено 2015-02-24.
- ^ «Раннее и позднее связывание». Visualbasic.about.com. Архивировано из оригинал 25 февраля 2015 г.. Получено 24 февраля 2015.
- ^ «Строгие условия выбора». Msdn.microsoft.com. 2015-02-18. Получено 2015-02-24.
- ^ GetDotNetCode.com:"Option Strict On". Getdotnetcode.com. Архивировано из оригинал 13 марта 2012 г.. Получено 24 февраля 2015.
- ^ а б «Коэволюция VB и C #». MSDN. Получено 2010-03-27.
- ^ а б «Mono приносит программы Visual Basic в Linux». Linux-часы. Архивировано из оригинал на 2012-09-14. Получено 2010-03-25.
- ^ «Впервые в истории C # оценивается выше, чем Visual Basic». Tiobe.com. Получено 24 февраля 2015.
- ^ "Индекс TIOBE | TIOBE - Компания по качеству программного обеспечения". www.tiobe.com. Получено 2019-03-27.
- ^ а б c Патрик Мидер. "Взрыв Mindshare C #". Visual Studio Журнал, ноябрь 2007 г. Архивировано с оригинал на 2008-04-20. Получено 2008-12-16.
- ^ «Опрос разработчиков Stack Overflow 2018». Переполнение стека. Получено 2018-04-22.