Сравнение C Sharp и Visual Basic .NET
C# и Visual Basic (.NET) — два основных языка программирования, используемых для программирования на платформе .NET .
История языка
[ редактировать ]C# и VB.NET — очень разные языки по синтаксису и истории.
Как следует из названия, синтаксис C# основан на базовом языке программирования C, первоначально разработанном Деннисом Ритчи из Bell Labs (AT&T) в 1970-х годах. [1] Java и C++ — два других языка программирования, синтаксис которых также основан на синтаксисе C. [2] поэтому они имеют общий внешний вид. Дополнительную информацию по этой теме см. в разделе «Сравнение C Sharp и Java» .
Корни BASIC уходят корнями в Дартмутский колледж . [3] BASIC (универсальный код символических инструкций для начинающих) был разработан в 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
импортированы в текущий файл, к ним можно получить доступ без предшествующего метода доступа к контейнеру [12] - The
My
пространство имен. [13] - Компоненты COM и их совместимость были более мощными в VB.NET, поскольку тип объекта привязывается во время выполнения; [14] однако в C# 4.0 добавлен
dynamic
тип, который функционирует как форма поздней привязки Object - Пространства имен можно импортировать на уровне проекта, поэтому их не нужно импортировать в каждый отдельный файл, как в 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 все переменные инициализируются автоматически. - The
MyClass
Ключевое слово ведет себя как объектная переменная, ссылающаяся на текущий экземпляр класса в его первоначальной реализации.MyClass
похоже наMe
, но все вызовы методов для него обрабатываются так, как если бы метод был NotOverridable. MyBase.New
используется для явного вызова конструктора базового класса из конструктора производного класса.- The
My
Функция обеспечивает простой и интуитивно понятный доступ к ряду классов .NET Framework, позволяя пользователю Visual Basic взаимодействовать с компьютером, приложением, настройками, ресурсами и т. д. - Локальные переменные (т.е. переменные, объявленные внутри процедуры) инициализируются автоматически.
- Локальные переменные могут быть объявлены с помощью
Static
модификатор, чтобы сохранить их значение между вызовами процедуры. - The
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.
[ редактировать ]- Используйте справочную структуру C# в VB.NET. Подробную информацию можно найти, например, здесь: https://www.vbforums.com/showthread.php?889867-Use-C-ref-struct-in-VB-NET-Today. -И-голосуйте-против-предотвращения-этого-в-Рослин
- Многострочные комментарии. В VB это обрабатывается в редакторе Visual Studio IDE, который добавляет к выделенным фрагментам маркеры комментариев.
- Статические классы (классы, которые не могут содержать нестатические члены, хотя модули 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))
возвращает1
. - Указатели (в небезопасном контексте)
- Условный оператор ?:
(someThingTrueOrFalse) ? whenTrue() : whenFalse();
. VB.NET придется использоватьIf
функция с тремя параметрами - т.е.If(someThingTrueOrFalse, whenTrue(), whenFalse())
.
Другие характеристики Visual Basic .NET, неприменимые к C#.
[ редактировать ]- Преобразование логического значения True в целое число может дать -1 или 1 в зависимости от используемого преобразования.
- Присвоение и сравнение переменных использует один и тот же токен:
=
. В то время как в C# есть отдельные токены,==
для сравнения и=
присвоить значение - Идентификаторы VB.NET не чувствительны к регистру.
- При присвоении значения переменной с другим типом данных (и с
Option Strict
не включен), VB.NET будет принудительно использовать значение, если это возможно. Это автоматическое приведение иногда может привести к неожиданным результатам, например:
Dim i As Integer = "1" 'Compiler automatically converts String to Integer
Dim j As String = 1 'Compiler automatically converts Integer to String
If i = j Then 'Compiler does cast and compare between i and j
MsgBox("Avoid using, but this message will appear!")
End If
Хотя по умолчанию используется Option Strict
отключить по соображениям обратной совместимости, это рекомендовано Microsoft [15] и широко считается хорошей практикой Option Strict
включено, поскольку это увеличивает производительность приложений и снижает вероятность ошибок в именах и других ошибок программирования. [16]
Val()
функция, которая также анализирует нулевое значение при преобразовании в двойное (в С#Convert.ToDouble()
используется для преобразования любого объекта в значение двойного типа, но выдает исключение в случае нулевого значения)- CInt, CStr, CByte, CDbl, CBool, CDate, CLng, CCur, CObj и множество функций преобразования, встроенных в язык.
Другие характеристики 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# возможно иметь две переменные с одинаковым именем, например 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# используют большинство ключевых слов, с той разницей, что ключевые слова Visual Basic по умолчанию представляют собой версии ключевых слов C#, написанные с заглавной буквы, например Public
против public
, If
против if
.
Некоторые ключевые слова имеют совершенно разные версии в Visual Basic и C#:
Friend
противinternal
- модификаторы доступа, разрешающие ссылки между классами, но не между сборками, за исключением дружественных сборок.Me
противthis
- ссылка на текущий экземпляр объектаMustInherit
противabstract
- предотвращает прямое создание экземпляра класса и заставляет потребителей создавать ссылки на объекты только для производных классов.MustOverride
противabstract
- за принуждение производных классов к переопределению этого методаMyBase
противbase
- для ссылки на базовый класс, от которого получен текущий классNotInheritable
противsealed
- для объявления классов, которые не могут быть унаследованыNotOverridable
противsealed
- для объявления методов, которые не могут быть переопределены производными классамиOverridable
противvirtual
- объявляет метод как способный быть переопределенным в производных классахOverrides
противoverride
- для пометки виртуального метода как переопределенногоShared
противstatic
- для объявления методов, не требующих явного экземпляра объекта
Некоторые ключевые слова C#, такие как sealed
представляют разные вещи при применении к методам, а не к определениям классов. VB.NET, с другой стороны, использует разные ключевые слова для разных контекстов.
![]() |
Комментарии
[ редактировать ]С# | Визуальный Бейсик .NET |
---|---|
// Single line comment
/* Multi-line comment
line 2
line 3 */
/// XML single line comment
/** XML multi-line comment
line 2
line 3 */
#if COMMENT
multi-line comment via pre-processing
line 2
line 3
#endif
|
' Single line comment
''' XML 1st line comment
''' XML 2nd line comment
''' XML 3rd line comment
REM Comment
#If COMMENT Then
multi-line comment via pre-processing
line 2
line 3
#End If
Внутристрочные комментарии недоступны. |
Условные предложения
[ редактировать ]С# | Визуальный Бейсик .NET |
if (condition) {
// condition is true
} else if (othercondition) {
// condition is false and othercondition is true
} else {
// condition and othercondition are false
}
|
If condition Then
' condition is true
ElseIf othercondition Then
' condition is false and othercondition is true
Else
' condition and othercondition false
End If
|
Петли
[ редактировать ]С# | Визуальный Бейсик .NET |
for (int i = 0; i < number; ++i) {
// loop from zero up to one less than number
}
|
For i As Integer = 0 To number - 1
' loop from zero up to one less than number
Next
|
for (int i = number; i >= 0; --i) {
// loops from number down to zero
}
|
For i As Integer = number To 0 Step -1
' loops from number down to zero
Next
|
for (int i = 0; i <= 20; i += 2) {
// loops from 0 to 20 by 2's
}
|
For i As Integer = 0 To 20 Step 2
' loops from 0 to 20 by 2's
Next
|
break; //breaks out of a loop
|
Exit For 'breaks out of a for loop
Exit While 'breaks out of a while loop
Exit Do 'breaks out of a do loop
|
Сравнители
[ редактировать ]Примитивные типы
[ редактировать ]С# | Визуальный Бейсик .NET | |
if (a == b) {
// equal
}
|
If a = b Then
' equal
End If
| |
if (a != b) {
// not equal
}
Или: if (!(a == b)) {
// not equal
}
|
If a <> b Then
' not equal
End If
Или: If Not a = b Then
' not equal
End If
|
|
if (a == b & c == d | e == f) {
// non-short-circuiting boolean operators
}
|
If a = b And c = d Or e = f Then
' non-short-circuiting boolean operators
End If
|
|
if (a == b && c == d || e == f) {
// short-circuiting boolean operators
}
|
If a = b AndAlso c = d OrElse e = f Then
' short-circuiting boolean operators
End If
| |
Типы объектов
[ редактировать ]С# | Визуальный Бейсик .NET |
if (object.ReferenceEquals(a, b)) {
// variables refer to the same instance
}
|
If a Is b Then 'Can also be written as If Object.ReferenceEquals(a, b) Then
' variables refer to the same instance
End If
|
if (!object.ReferenceEquals(a, b)) {
// variables do not refer to the same instance
}
|
If a IsNot b Then
' variables do not refer to the same instance
End If
|
if (a == b) {
// instances are equivalent
}
|
If a = b Then
' instances are equivalent
End If
|
if (a != b) {
// not equivalent
}
|
If a <> b Then
' not equivalent
End If
|
var type = typeof(int);
|
Dim type = GetType(Integer)
|
if (a is b) {
// types of a and b are compatible
}
|
If TypeOf a Is b Then
' types of a and b are compatible
End If
|
if (!(a is b)) {
// types of a and b are not compatible
}
|
If TypeOf a IsNot b Then
' types of a and b are not compatible
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]
- 2007 года Опрос Forrester Research показал, что 59% разработчиков .NET использовали только VB.NET для создания программного обеспечения. [18]
- Visual Basic Express — самая популярная загрузка из всех загрузок Visual Studio Express . [21]
- Согласно опросу, проведенному журналом Visual Studio Magazine в ноябре 2007 года , «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 Groups , поисковая система 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# занимает далекое четвертое место по внедрению .NET. 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 более высокого уровня.
Ссылки
[ редактировать ]- ^ Ричи, Деннис (апрель 1993 г.). Чистория (Отчет). Лаборатории Белла. Архивировано из оригинала 3 февраля 2015 г. Проверено 18 августа 2013 г.
- ^ «История языка программирования Java» . Freejavaguide.com . Проверено 18 августа 2013 г.
- ^ "БАЗОВЫЙ в Дартмуте"
- ^ «Рождение Visual Basic» . Forestmoon.com . Проверено 18 августа 2013 г.
- ^ «История Powersoft. История PowerBuilder» . Ланниган.орг . Проверено 18 августа 2013 г.
- ^ «Языковая стратегия .NET» . Февраль 2017.
- ^ Крил, Пол (27 февраля 2009 г.). «Конвергентные языки программирования Microsoft | Мир разработчиков» . ИнфоМир. Архивировано из оригинала 26 января 2013 г. Проверено 18 августа 2013 г.
- ^ «Промежуточный язык Microsoft» . Dotnet-guide.com . Проверено 18 августа 2013 г.
- ^ Мэтью Герц. «Масштабирование: очень загруженный фоновый компилятор» . Журнал MSDN . Архивировано из оригинала 19 февраля 2008 г. Проверено 16 декабря 2008 г.
- ^ Jump up to: а б с «Система и методология, обеспечивающие рефакторинг с помощью компилятора» . Freepatentsonline.com . Проверено 24 февраля 2015 г.
- ^ Джонатан Аллен. «Нужны ли в C# XML-литералы VB9?» . Проверено 13 января 2009 г.
- ^ «Свойство DateAndTime.Now (Microsoft.VisualBasic)» . Msdn.microsoft.com. 18 февраля 2015 г. Проверено 24 февраля 2015 г.
- ^ «Разработка с помощью My (Visual Basic)» . Msdn.microsoft.com. 18 февраля 2015 г. Проверено 24 февраля 2015 г.
- ^ «Раннее и позднее связывание» . Visualbasic.about.com. Архивировано из оригинала 25 февраля 2015 года . Проверено 24 февраля 2015 г.
- ^ «Опцион строгого заявления» . Msdn.microsoft.com. 18 февраля 2015 г. Проверено 24 февраля 2015 г.
- ^ GetDotNetCode.com: «Опция строго включена» . Getdotnetcode.com. Архивировано из оригинала 13 марта 2012 года . Проверено 24 февраля 2015 г.
- ^ Jump up to: а б «Коэволюция VB и C#» . MSDN . Проверено 27 марта 2010 г.
- ^ Jump up to: а б «Mono переносит программы Visual Basic в Linux» . Linux-Watch . Архивировано из оригинала 14 сентября 2012 г. Проверено 25 марта 2010 г.
- ^ «Впервые в истории C# получил рейтинг выше, чем Visual Basic» . Тиобе.com . Проверено 24 февраля 2015 г.
- ^ «Индекс ТИОБЕ» . TIOBE.com: Компания по обеспечению качества программного обеспечения . Проверено 27 марта 2019 г.
- ^ Jump up to: а б с Патрик Мидер. «Взрывающийся разум C#» . Visual Studio Журнал , ноябрь 2007 г. Архивировано из оригинала 20 апреля 2008 г. Проверено 16 декабря 2008 г.
- ^ «Опрос разработчиков Stack Overflow 2018» . Переполнение стека . Проверено 22 апреля 2018 г.