В чем разница между VB и VB.NET?
================================

В чем разница между VB и VB.NET?

Предпочтительно пояснение с примерами.

 

Если вы делаете выбор для нового проекта, то соответствующие пункты:

* VB6 является устаревшим (выпущено в 1998 году, IDE больше не поддерживается, а среда выполнения поддерживается только на протяжении жизни Win8)
* VS2008 не поддерживает VB6
* VB.NET - это современный язык, поддерживаемый в VS2008

Я бы сказал, что существует очень мало причин (если есть!) выбрать VB.OLD над VB.NET.

Если вы "просто заинтересованы", статья Википедии на каждом языке довольно информативна, но в двух словах они представляют собой совершенно разные языки, которые имеют внешне похожий синтаксис. У VB была своя среда исполнения, где VB.NET - один из многих языков, которые используют более современную .NET Framework.

 

Есть много различий.

* Наибольшее изменение в VB6 и VB.NET - среда выполнения. VB6 использовал VB-Runtime, в то время как VB.NET использует .Net Common Language Runtime (.Net CLR). CLR гораздо лучше разработан и реализован, чем VB-Runtime. CLR использует лучший перевод кода через компилятор Just in Time, тогда как VB-Runtime интерпретирует код. CLR Garbage Collector также более эффективен, чем VB6, так как он может также обнаруживать циклические ссылки.
* VB6 был языком на основе интерпретатора, в то время как VB.NET - это скомпилированный язык
* VB6 не был языком с типом, в то время как VB.NET - это безопасный тип. В VB.NET нет варианта варианта, и никакие магические преобразования типов не происходят в VB.NET

некоторые другие отличия:

 Наследование
-------------

VB.Net поддерживает наследование, позволяя вам определять классы, которые служат основой для производных классов. Производные классы наследуют и могут распространяться на свойства и методы базового класса. Они также могут переопределять унаследованные методы новыми реализациями базового класса. Все классы, созданные с помощью VB.Net, наследуются по умолчанию. Поскольку формы, которые вы разрабатываете, действительно являются классами, вы можете использовать наследование для определения новых форм на основе существующих. Подробнее см. [Наследование в Visual Basic](http://msdn.microsoft.com/en-us/library/5x4yd9d5%28VS.80%29.aspx).

 Обработка исключений
---------------------

VB.Net поддерживает структурированную обработку исключений, используя расширенную версию Try... Catch... Наконец, синтаксис, поддерживаемый другими языками, такими как С++. Обработка структурированных исключений сочетает в себе современную структуру управления (аналогичную Select Case или While) с исключениями, защищенные блоки кода и фильтры. Структурированная обработка исключений позволяет легко создавать и поддерживать программы с надежными и всеобъемлющими обработчиками ошибок. Подробнее см. [Введение в обработку исключений](http://msdn.microsoft.com/en-us/library/c68xfk56%28VS.80%29.aspx).

 Перегрузки
-----------

Перегрузка - это способность определять свойства, методы, процедуры или операторы, имеющие одно и то же имя, но использующие разные типы данных. Вы можете использовать перегруженные процедуры, чтобы обеспечить столько реализаций, сколько необходимо для обработки различных видов данных, одновременно предоставляя единую, универсальную процедуру. Подробнее см. [Перегруженные свойства и методы](http://msdn.microsoft.com/en-us/library/1z71zbeh.aspx).

 Переопределение свойств и методов
----------------------------------

Ключевое слово Overrides позволяет производным объектам переопределять характеристики, унаследованные от родительских объектов. Переопределенные члены имеют те же аргументы, что и члены, унаследованные от базового класса, но они имеют разные реализации. Новая реализация элемента может вызывать исходную реализацию в родительском классе, предшествуя имени участника с помощью MyBase. Подробнее см. [Переопределение свойств и методов](http://msdn.microsoft.com/en-us/library/818x9db9%28VS.90%29.aspx).

 Конструкторы и деструкторы
---------------------------

Конструкторы - это процедуры, которые управляют инициализацией новых экземпляров класса. И наоборот, деструкторы - это методы, которые освобождают системные ресурсы, когда класс покидает область действия или имеет значение Nothing. VB.Net поддерживает конструкторы и деструкторы с использованием процедур Sub New и Sub Finalize. Подробнее см. [Время жизни объекта: как создаются и уничтожаются объекты](http://msdn.microsoft.com/en-us/library/hks5e2k6%28VS.80%29.aspx).

 Типы данных
------------

VB.Net вводит три новых типа данных. Тип данных Char - это 16-разрядная величина без знака, используемая для хранения символов Юникода. Это эквивалентно типу данных .NET Framework System.Char. Тип данных Short, подписанное 16-битное целое, был назван Integer в более ранних версиях Visual Basic. Тип данных Decimal - это 96-разрядное целое число со знаком, масштабируемое переменной мощностью 10. В более ранних версиях Visual Basic он был доступен только внутри Variant. Кроме того, Visual Basic теперь поддерживает беззнаковые целочисленные типы данных (UShort, UInteger и ULong), а также SByte с подписанным типом. Подробнее см. [Типы данных в Visual Basic](http://msdn.microsoft.com/en-us/library/ffsdktda%28VS.80%29.aspx).

 Интерфейсы
-----------

Интерфейсы описывают свойства и методы классов, но в отличие от классов интерфейсы не обеспечивают реализации. Используйте оператор Interface для объявления интерфейсов; используйте инструкцию "Реализаторы" для написания кода, который накладывает элементы, описанные в интерфейсе, на практике. Подробнее см. [Интерфейсы в Visual Basic](http://msdn.microsoft.com/en-us/library/28e2e18x.aspx).

 Делегаты
---------

 Делегаты - это объекты, которые могут вызывать методы объектов от вашего имени и иногда описываются как ориентированные на объекты объектно-ориентированные указатели на функции. Вы можете использовать делегаты, чтобы позволить процедурам определять метод обработчика событий, который запускается при возникновении события. Вы также можете использовать делегаты с многопоточными приложениями. Подробнее см. [Делегаты и Оператор AddressOf](http://msdn.microsoft.com/en-us/library/74wy9422%28VS.90%29.aspx).

 Общие участники
----------------

Общие члены - это свойства, процедуры и поля, которые совместно используются всеми экземплярами класса. Общие члены данных полезны, когда несколько объектов должны использовать информацию, общую для всех объектов. Вы можете использовать общие методы класса без предварительного создания объекта из класса. Подробнее см. [Общие члены в Visual Basic](http://msdn.microsoft.com/en-us/library/4hbsxy95%28VS.80%29.aspx).
Ссылки

Вы можете использовать ссылки для использования объектов, определенных в других сборках. В VB.Net ссылки указывают на сборки вместо библиотек типов. Для получения дополнительной информации см. [Ссылки и Заявление о импорте](http://msdn.microsoft.com/en-us/library/h9st4tss%28VS.71%29.aspx).

 Пространство имен
------------------

Пространства имен предотвращают конфликты имен при организации классов, интерфейсов и методов в иерархии. Подробнее см. [Пространства имен в Visual Basic](http://msdn.microsoft.com/en-us/library/zt9tafza.aspx).

 Сборки
-------

Ассембли заменяют и расширяют возможности библиотек типов, описывая все необходимые файлы для определенного компонента или приложения. Сборка может содержать одно или несколько пространств имен. Подробнее см. [Ассембли](http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx).

 Атрибуты
---------

Вы можете использовать атрибуты для предоставления дополнительной информации о элементах программы. Например, вы можете использовать атрибут, чтобы указать, какие методы в классе должны быть открыты, когда класс используется как веб-служба XML. Подробнее см. [Атрибуты в Visual Basic](http://msdn.microsoft.com/en-us/library/39967861%28VS.80%29.aspx).

 Многопоточность
----------------

Вы можете использовать VB.Net для написания приложений, которые могут выполнять несколько задач независимо. Задача, которая может выполнять другие задачи, может выполняться в отдельном потоке, процесс, известный как многопоточность. Вызывая сложные задачи для выполнения потоков, которые отделены от вашего пользовательского интерфейса, многопоточность делает ваши приложения более восприимчивыми к пользовательскому вводу. Подробнее см. [Многопоточные приложения](http://www.yoda.arachsys.com/csharp/threads/).

 Операторы сдвига бит
---------------------

Теперь VB.Net поддерживает арифметические операции с левым и правым сдвигами в интегральных типах данных (байты, короткие, целые и длинные), а также на неподписанных типах (UShort, UInteger и ULong). Арифметические сдвиги не являются круговыми, что означает, что биты, сдвинутые с одного конца результата, не возвращаются на другом конце. Также предоставляются соответствующие операторы присваивания. Подробнее см. [Операторы смены битов и операторы присваивания](http://msdn.microsoft.com/en-us/library/fw84t893%28VS.71%29.aspx).

 Объявление переменной цикла
----------------------------

Вы можете использовать VB.Net для объявления переменной цикла как части цикла For или For Each. Вы можете включить предложение As для переменной в операторе For или For Each, если никакая переменная этого имени не была объявлена вне цикла. Объем переменной цикла, объявленной таким образом, является самим циклом. Подробнее см. [За... Следующее выражение (Visual Basic)](http://msdn.microsoft.com/en-us/library/5z06z1kb.aspx) и [Для каждого... Следующее выражение (Visual Basic)](http://msdn.microsoft.com/en-us/library/5ebk1751.aspx).

Дополнительная информация:

* <http://social.msdn.microsoft.com/Forums/en-SG/Vsexpressvb/thread/15f1ed35-47c4-4ae0-a8a6-16bad23f6947>
* <http://msdn.microsoft.com/en-us/library/ms172618.aspx>
* <http://msdn.microsoft.com/en-us/library/y17w47af.aspx>
* <http://www.thescarms.com/vbasic/vb6vsvbnet.aspx>
* <http://www.programmersheaven.com/2/FAQ-VBNET-VB6-VBNET-Differences>
* [Что нового в Visual Basic для пользователей Visual Basic 6.0](http://msdn.microsoft.com/en-us/library/55yzhfb2.aspx)

  **Изменить**: в комментариях некоторые функции, такие как конструкторы, уже поддерживаются в VB6 (по-другому), посмотрите на последнюю ссылку, что больше учитывает

 

Основные отличия - это номер версии и ориентация объектов.

До версии 6 он был известен как VB. Начиная с версии 7, выпущенной с .Net 1.0, он был известен как VB.NET.

Он полностью обновился в версии 7, чтобы стать более упорядоченным с .Net Framework (совместимость с CLI и CLS) и другими языками, такими как С# и Java.

В этом переходе несколько изменений привели к нарушенной совместимости с предыдущими версиями. Вот почему Microsoft предоставила несколько инструментов в Visual Studio для преобразования старых приложений VB6 в .Net.

* [Ссылка на Visual Basic в Википедии](https://en.wikipedia.org/wiki/Visual_Basic)
* [Ссылка на Visual Basic.NET в Википедии](https://en.wikipedia.org/wiki/Visual_Basic_.NET)

 

Классический VB не поддерживает большинство функций OOP, в то время как VB.NET.