C # и Visual Basic .NET - два основных языка, используемых для программирования на .NET Framework .
История языков [ править ]
C # и VB.NET - синтаксически очень разные языки с очень разной историей.
Как следует из названия, синтаксис C # основан на базовом языке программирования C, первоначально разработанном Деннисом Ритчи из Bell Labs (AT&T) в 1970-х годах. [1] Java и C ++ - два других языка программирования, синтаксис которых также основан на синтаксисе C, [2] поэтому они имеют общий внешний вид. См. Сравнение Java и C Sharp для получения дополнительной информации по этой теме.
Корни BASIC уходят корнями в Дартмутский колледж . [3] ОСНОВНОЙ(Универсальный символьный код инструкций для начинающих) был разработан в 1960-х годах как метод преодоления трудностей, связанных с использованием языка ассемблера, написанного для мэйнфреймов и оборудования для конкретных процессоров и / или конкретных торговых марок. Программирование зависело от аппаратного обеспечения в большей степени по маркетинговым причинам, чем для сохранения логической композиции программирования, которая должна выходить за рамки аппаратного обеспечения. (Претензия Microsoft на известность своей операционной системой заключалась в том, чтобы освободить потребителей от аппаратно-зависимых устройств, инкапсулируя эти задачи в своей операционной системе.) Код стал «переносимым» благодаря компилятору, и, фактически, как Visual Basic .NET, так и C # используют тот же CLR (Common Language Runtime) сегодня. Microsoft и HP были заинтересованы в создании стандартного языка ISO, что, однако, было первоначальной целью; HP отказалась от поддержки,компьютерный язык ISO так и не стал международным стандартом.
VB.NET берет свое начало в BASIC. Вначале 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, в том числе:
- Пространство имен по умолчанию скрыто (но может быть отключено)
- Некоторые файлы проекта скрыты (пользователь может их показать)
- Автоматически сгенерированные
My.*
пространства имен содержат множество часто используемых ярлыков, перенесенных из VB6, таких как методы для работы с реестром и файлом конфигурации приложения.
Фоновая компиляция - это функция среды разработки Visual Studio, при которой код компилируется в том виде, в каком он написан программистом, с целью выявления ошибок компиляции без необходимости создания решения. Эта функция была доступна для 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 имеет
Handles
синтаксис для событий, который связывает обработчики событий с объектными переменными, а не с объектами. - Запуск событий выполняется с помощью
RaiseEvent
ключевого слова, что дает IDE возможность показать список доступных событий для выбора.RaiseEvent
неявно проверяет, подключены ли какие-либо обработчики событий. (в C # создание события синтаксически идентично вызову процедуры и требует дополнительной строки кода для проверки проводных обработчиков событий) - Делегатов на мероприятия объявлять не нужно. Они неявно декларируются в объявлении событий.
- Обращение к объекту с использованием неквалифицированной точечной ссылки с использованием
With ... End With
структуры - XML-литералы [11]
- Встроенные объявления даты, например
#12/31/2000#
Module
(хотя статические классы C # с дополнительной семантикой, но каждое поле должно быть индивидуально объявлено как статическое)- К членам
Module
s, импортированным в текущий файл, можно получить доступ без предшествующего метода доступа к контейнеру [12] - Пространство
My
имен. [13] - Компоненты COM и совместимость были более мощными в VB.NET, так как тип Object привязывается во время выполнения; [14] однако в C # 4.0 добавлен
dynamic
тип, который функционирует как форма объекта с поздним связыванием. - Пространства имен можно импортировать на уровне проекта, поэтому их не нужно импортировать в каждый отдельный файл, как в C #.
- Определение условных констант компилятора
- Методы свойств могут принимать параметры
- Свойства могут передаваться в методы с
ByRef
параметрами (ref
параметры в C #). В C # вам нужно написать три дополнительных инструкции: объявить переменную, скопировать значение свойства в переменную и скопировать переменную обратно в свойство после вызова метода. Enum
s можно определить внутри интерфейсовCase
операторы могут содержать выражения неравенства, напримерIs >= 3
. (в C # это может быть имитируются вложеннымElse
иIf
отчетность)Overloads
ключевое слово указывает, что свойство или процедура повторно объявляют одно или несколько существующих свойств или процедур с тем же именем в том же классе или базовом классе. (отсутствие этого ключевого слова в C # может привести к непреднамеренной перегрузке)Implements
ключевое слово, чтобы указать, какие интерфейсы реализует член класса. В C # существует аналогичный синтаксис, но он не является обязательным и может применяться только в том случае, если член реализует единственный интерфейс.Like
Оператор для сравнения шаблонов строк гораздо проще, чем использование регулярных выражений. (в C # то же самое доступно с методом Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString, но не в качестве удобного ключевого слова языка)Return
заявление не требуется. Возврат также можно выполнить, присвоив значение функции- Visual Basic имеет встроенные константы, такие как
vbCrLf
иvbTab
- Нет
out
Модификатор параметр не существует, так как в VB все переменные автоматически инициализируются. - В
MyClass
ключевое слово ведет себя как объектная переменная , ссылаясь на текущий экземпляр класса как первоначально реализован.MyClass
похож наMe
, но все его вызовы обрабатываются так, как если бы этот метод был NotOverridable. MyBase.New
используется для явного вызова конструктора базового класса из конструктора производного класса.- Эта
My
функция обеспечивает простой и интуитивно понятный доступ к ряду классов .NET Framework, позволяя пользователю Visual Basic взаимодействовать с компьютером, приложением, параметрами, ресурсами и т. Д. - Локальные переменные (т.е. переменные, объявленные внутри процедуры) инициализируются автоматически.
- Локальные переменные могут быть объявлены с помощью
Static
модификатора, чтобы сохранить их значение между вызовами процедуры. Default
Декларация делает свойство индекса и иметь возможность использовать более короткий синтаксис для сбора извлечений , какMyCollection(5)
. В C # есть аналогичная конструкция, в которой ключевое слово повторно используется вthis
качестве имени свойства. Несколько индексаторов могут быть объявлены с использованием ключей разных типов, например,MyCollection(5)
илиMyCollection("Bob")
.- В C # отсутствует
DirectCast
(сопоставление с одной инструкцией CLR) строгое преобразование типов может быть выполненоas
оператором, который включает дополнительную защиту от ошибок во время выполнения. - В C # отсутствует
End
оператор, который внезапно завершает работу приложения. - Вывод лямбда-выражений
Dim x = Function(n As Integer) n + 1
Возможности C #, отсутствующие в Visual Basic .NET [ править ]
- Многострочные комментарии. В VB это обрабатывается в редакторе IDE Visual Studio, который добавляет маркеры комментариев к выборкам.
- Статические классы (классы, которые не могут содержать никаких нестатических членов, хотя модули VB.NET по сути являются статическими классами с дополнительной семантикой)
- Можно использовать
checked
иunchecked
контексты для мелкозернистого контроля переполнения / потери значимости проверки - Итеративные циклы for могут содержать несколько условных выражений, например
for(int i = 0; i < 10 && somethingTrue; i++)
. Это наследие языка C, гдеfor
оператор в основном является синтаксическим сахаром дляwhile
оператора. - Получатель и установщик свойства могут реализовывать отдельные интерфейсы. В VB вам придется вместо этого определить два свойства: свойство только для чтения, реализующее один интерфейс, и свойство только для записи, реализующее другой интерфейс.
- Неявная реализация интерфейса
- Можно использовать оператор объединения,
??
чтобы вернуть первое ненулевое значение (например,null ?? null ?? 1
возврат1
). VB.NET должен использоватьIf
функцию с двумя параметрами - например,If(Nothing, If(Nothing, 1))
return1
. - Указатели (в небезопасном контексте)
- Условный оператор?:
(someThingTrueOrFalse) ? whenTrue() : whenFalse();
. VB.NET придется использоватьIf
функцию с тремя параметрами - то естьIf(someThingTrueOrFalse, whenTrue(), whenFalse())
.
Другие характеристики Visual Basic .NET не применимы к C # [ править ]
- Преобразование логического значения True в Integer может дать -1 или 1 в зависимости от используемого преобразования.
- Назначение и сравнение переменных использует тот же маркер:
=
. В то время как C # имеет отдельные токены==
для сравнения и=
присвоения значения - Идентификаторы VB.NET не чувствительны к регистру.
- При присвоении значения переменной с другим типом данных (и
Option Strict
не включенной) VB.NET, если возможно, принудительно изменит значение. Это автоматическое принуждение иногда может приводить к неожиданным результатам, например:
Dim i As Integer = "1" 'Компилятор автоматически преобразует String в Integer Dim j As String = 1 ' Компилятор автоматически преобразует Integer в String If i = j Then 'Компилятор выполняет приведение и сравнение между i и j MsgBox ( «Избегайте использования, но это сообщение появится! » ) Конец Если
Хотя по умолчанию этот параметр Option Strict
отключен по причинам обратной совместимости, он рекомендуется Microsoft [15] и широко считается хорошей практикой Option Strict
, поскольку он увеличивает производительность приложения и снижает вероятность ошибок именования и других ошибки программирования. [16]
Val()
функция, которая также анализирует нулевое значение при преобразовании в double (в C #Convert.ToDouble()
используется для преобразования любого объекта в значение типа double, но выдает исключение в случае нулевого значения)- CInt, CStr, CByte, CDbl, CBool, CDate, CLng, CCur, CObj и широкий спектр функций преобразования, встроенных в язык
Другие характеристики C # не применимы к Visual Basic .NET [ править ]
- По умолчанию числовые операции не проверяются. Это приводит к немного более быстрому коду с риском того, что числовые переполнения не будут обнаружены. Однако программист может поместить арифметические операции в проверяемый контекст, чтобы активировать проверку переполнения. (Это можно сделать в Visual Basic, отметив соответствующий параметр)
- Идентификаторы C # чувствительны к регистру.
- Чтобы присвоить одно и то же значение нескольким переменным, вы можете использовать
a=b=c
.
Сравнение синтаксиса [ править ]
В этом разделе не процитировать любые источники . Июнь 2013 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Visual Basic .NET завершает блок кода операторами (или операторами для цикла for ), которые более знакомы программистам, имеющим опыт использования T-SQL . В C # фигурные скобки используются для разделения блоков, что более знакомо программистам, имеющим опыт работы с другими широко распространенными языками, такими как C ++ и Java . Кроме того, в C #, если блок состоит только из одного оператора, фигурные скобки можно опустить.End BlockName
Next
{}
C # чувствителен к регистру, а Visual Basic .NET - нет. Таким образом, в C # можно иметь две переменные с одинаковыми именами, например variable1
и Variable1
. Visual Studio исправит (сделает единообразным) регистр переменных по мере их ввода в VB.NET. Однако в некоторых случаях может быть полезна чувствительность к регистру . Программисты на C # обычно пишут имена типов и членов с заглавной буквы, а имена полей и переменных оставляют в нижнем регистре. Это позволяет, например, довольно естественное именование аргументов методы: public int CalculateOrders(Customer customer)
. Однако это может вызвать проблемы для тех, кто преобразует код C # в язык без учета регистра, например Visual Basic, или для тех, кто не привык читать язык с учетом регистра.
Ключевые слова [ править ]
Visual Basic не чувствителен к регистру, что означает, что допустимы любые комбинации букв верхнего и нижнего регистра в ключевых словах. Visual Studio автоматически преобразует все ключевые слова Visual Basic в формы по умолчанию с заглавной буквы, например «Public», «If».
C # чувствителен к регистру, а все ключевые слова C # - в нижнем регистре.
Visual Basic и C # большинство ключевых слов доля, с той разницей, что по умолчанию Основные ключевые слова Визуальные являются капитализированные версии ключевых слов C #, например , Public
против public
, If
против if
.
Несколько ключевых слов имеют очень разные версии в Visual Basic и C #:
Friend
vsinternal
- модификаторы доступа, разрешающие межклассовые, но не межсборочные ссылки, за исключением дружественных сборокMe
vsthis
- ссылка на текущий экземпляр объектаMustInherit
vsabstract
- предотвращает создание экземпляра класса напрямую и заставляет потребителей создавать объектные ссылки только на производные классы.MustOverride
vsabstract
- для принуждения производных классов переопределять этот методMyBase
vsbase
- для ссылки на базовый класс, от которого происходит текущий классNotInheritable
vssealed
- для объявления классов, которые не могут быть унаследованыNotOverridable
vssealed
- для объявления методов, которые не могут быть переопределены производными классамиOverridable
vsvirtual
- объявляет, что метод может быть переопределен в производных классахOverrides
vsoverride
- для пометки виртуального метода как переопределенногоShared
vsstatic
- для объявления методов, не требующих явного экземпляра объекта
Некоторые ключевые слова C #, например, sealed
представляют разные вещи при применении к методам, а не к определениям классов. VB.NET, с другой стороны, использует разные ключевые слова для разных контекстов.
Эта статья может содержать примеры неизбирательного , чрезмерного или нерелевантного характера . Февраль 2012 г. ) ( |
Комментарии [ редактировать ]
C # | Visual Basic .NET |
---|---|
// Однострочный комментарий/ * Многострочный комментарий, строка 2, строка 3 * //// однострочный комментарий XML/ ** XML многострочный комментарий строка 2 строка 3 * /# COMMENT мульти - линия комментарий через предварительно - обработка линию 2 линии 3 #endif | 'Однострочный комментарий'' 'Комментарий 1-й строки XML ' '' Комментарий 2-й строки XML '' 'Комментарий 3-й строки XMLREM Комментарий#If COMMENT Тогда несколько - линия комментарий через предварительно - обработка линии 2 линии 3 #End Если Внутристрочные комментарии недоступны |
Условные [ править ]
C # | Visual Basic .NET |
if ( условие ) { // условие истинно } else if ( другое условие ) { // условие ложно, а другое условие истинно } else { // условие и другое условие ложны } | If condition Then 'condition is true ElseIf othercondition Then ' condition is false, а othercondition is true Else 'condition and othercondition false End If |
Петли [ править ]
C # | Visual Basic .NET |
for ( int i = 0 ; i < number ; ++ i ) { // цикл от нуля до единицы, меньшей числа } | For i As Integer = 0 To number - 1 'цикл от нуля до одного меньше числа Далее |
for ( int i = number ; i > = 0 ; - i ) { // цикл от числа до нуля } | For i As Integer = число До 0 Шаг - 1 'циклически переходит от числа к нулю Далее |
for ( int i = 0 ; i <= 20 ; i + = 2 ) { // цикл от 0 до 20 по двойкам } | For i As Integer = от 0 до 20 Шаг 2 'выполняет цикл от 0 до 20 с помощью 2-х Далее |
перерыв ; // выходит из цикла | Exit For 'выходит из цикла for Exit While 'выходит из цикла while Exit Do 'выходит из цикла do |
Сравнители [ править ]
Примитивные типы [ править ]
C # | Visual Basic .NET | |
if ( a == b ) { // равно } | Если a = b Then 'равно End If | |
if ( a ! = b ) { // не равно } Или же: if (! ( a == b )) { // не равно } | Если a <> b Then 'не равно End If Или же: If Not a = b Then 'не равно End If | |
if ( a == b & c == d | e == f ) { // логические операторы без короткого замыкания } | Если через = Ь и с = d или е = е Тогда «не короткое замыкание булевы операторы End If | |
if ( a == b && c == d || e == f ) { // короткое замыкание логических операторов } | Если a = b AndAlso c = d OrElse e = f Then ' сокращающие логические операторы End If | |
Типы объектов [ править ]
C # | Visual Basic .NET |
if ( object . ReferenceEquals ( a , b )) { // переменные относятся к одному и тому же экземпляру } | If a Is b Then 'Также можно записать как If Object.ReferenceEquals (a, b) Then ' переменные ссылаются на один и тот же экземпляр End If |
if (! object . ReferenceEquals ( a , b )) { // переменные не относятся к одному и тому же экземпляру } | If a IsNot b Then 'переменные не относятся к одному и тому же экземпляру End If |
if ( a == b ) { // экземпляры эквивалентны } | Если a = b Then 'экземпляры эквивалентны End If |
if ( a ! = b ) { // не эквивалентно } | Если a <> b Then 'не эквивалентно End If |
var type = typeof ( int ); | Дим типа = GetType ( целое число ) |
if ( a is b ) { // типы a и b совместимы } | If TypeOf a Is b Then 'типы a и b совместимы End If |
if (! ( a is b )) { // типы a и b несовместимы } | If TypeOf a IsNot b Then 'типы a и b несовместимы End If |
Принятие и поддержка сообщества [ править ]
И 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]
- Опрос Forrester Research 2007 года показал, что 59% разработчиков .NET использовали только VB.NET для создания программного обеспечения. [18]
- Visual Basic Express - самая популярная загрузка из всех загрузок Visual Studio Express . [21]
- Согласно опросу, проведенному в ноябре 2007 года журналом Visual Studio Magazine, «41 процент сказали, что использовали C #, 34 процента - программировали на VB.NET, а 25 процентов ответили« другое »» [21].
- Стивен Уайли , менеджер по маркетингу в Apress , сообщил: «Заголовки C # легко превосходят книги заголовков VB.NET, где-то между 2–1 и 3–1». [21]
- MSDN Blogs , блог-сайт для сотрудников 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 (ранее Managed C ++) [ править ]
C ++ / CLI (замена Managed Extensions для 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 компилируются до Common Intermediate Language (CIL), который содержит обширные метаданные и функционально и логически эквивалентен исходному коду языка .NET. По этим причинам, хотя можно писать код непосредственно в CIL, это делается редко. Эквивалентность кода языка CIL и .NET позволяет таким инструментам, как .NET Reflector, преобразовывать сборку .NET в исходный код, почти идентичный исходному. Обфускаторы кода часто используются для защиты от этого и работают, напрямую изменяя CIL сборки, чтобы затруднить или сделать невозможной декомпиляцию на язык .NET более высокого уровня.
Ссылки [ править ]
- ^ «История» . Cm.bell-labs.com. Архивировано из оригинала на 2015-02-03 . Проверено 18 августа 2013 .
- ^ «История языка программирования Java» . Freejavaguide.com . Проверено 18 августа 2013 .
- ^ "ОСНОВНОЙ в Дартмуте"
- ^ «Рождение Visual Basic» . Forestmoon.com . Проверено 18 августа 2013 .
- ^ "История Powersoft История PowerBuilder" . Lannigan.org . Проверено 18 августа 2013 .
- ^ «Языковая стратегия .NET» . Февраль 2017 г.
- ^ Криль, Павел (2009-02-27). «Конвергентные языки программирования Microsoft | Мир разработчиков» . InfoWorld. Архивировано из оригинала на 2013-01-26 . Проверено 18 августа 2013 .
- ^ «Промежуточный язык Microsoft» . Dotnet-guide.com . Проверено 18 августа 2013 .
- ^ Мэтью Герц. «Масштабирование: очень загруженный фоновый компилятор» . Журнал MSDN . Архивировано из оригинала на 2008-02-19 . Проверено 16 декабря 2008 .
- ^ a b c «Система и методология, обеспечивающая рефакторинг с помощью компилятора» . Freepatentsonline.com . Проверено 24 февраля 2015 года .
- ^ Джонатан Аллен. "Нужны ли C # XML-литералы VB9?" . Проверено 13 января 2009 .
- ^ «Свойство DateAndTime.Now (Microsoft.VisualBasic)» . Msdn.microsoft.com. 2015-02-18 . Проверено 24 февраля 2015 .
- ^ «Разработка с помощью My (Visual Basic)» . Msdn.microsoft.com. 2015-02-18 . Проверено 24 февраля 2015 .
- ^ «Раннее и позднее связывание» . Visualbasic.about.com. Архивировано из оригинального 25 февраля 2015 года . Проверено 24 февраля 2015 года .
- ^ «Строгая инструкция по выбору» . Msdn.microsoft.com. 2015-02-18 . Проверено 24 февраля 2015 .
- ^ GetDotNetCode.com: "Option Strict On" . Getdotnetcode.com. Архивировано из оригинального 13 марта 2012 года . Проверено 24 февраля 2015 года .
- ^ a b "Коэволюция VB и C #" . MSDN . Проверено 27 марта 2010 .
- ^ a b «Mono переносит программы Visual Basic в Linux» . Linux-Watch . Архивировано из оригинала на 2012-09-14 . Проверено 25 марта 2010 .
- ^ «C # впервые в истории оценивается выше, чем Visual Basic» . Tiobe.com . Проверено 24 февраля 2015 года .
- ^ "Индекс TIOBE | TIOBE - Компания по качеству программного обеспечения" . www.tiobe.com . Проверено 27 марта 2019 .
- ^ a b c Патрик Мидер. «Взрывающийся Mindshare C #» . Visual Studio Magazine, ноябрь 2007. Архивировано из оригинала на 2008-04-20 . Проверено 16 декабря 2008 .
- ^ «Опрос разработчиков Stack Overflow 2018» . Переполнение стека . Проверено 22 апреля 2018 .
Внешние ссылки [ править ]
- Подробнее о сравнении языков Microsoft Visual Studio
- Эквиваленты языка Microsoft Visual Studio 2003-2010
- Программирование Microsoft VSTO с помощью Visual Basic и C #
- CodeProject VB против C #
- Синтаксические различия между C # и VB.NET
- Различия между Asp.Net и Asp.Net Core - Asp.Net против Asp.Net Core