С# край над VB

Что в С#.NET делает его более подходящим для некоторых проектов, чем VB.NET?

Производительность?, Возможности?, Библиотеки/Компоненты?, Репутация?, Надежность? Поддержание работоспособности?, Легкость?


В принципе что-либо С# может делать, что невозможно с помощью VB, или наоборот. Вещи, которые вы просто , должны учитывать при выборе С#/VB для проекта.

Ответ 1

С# и VB в основном одинаковы, но есть некоторые незначительные отличия. Помимо очевидных различий в грамматике, вы имеете следующие отличия:

  • С# может вызывать небезопасный код
  • У VB есть дополнительные параметры (Coming in С# 4.0)
  • VB проще использовать при совершении поздних связанных вызовов (Coming in С# 4.0). Это и номер делают 2 make, используя VB, чтобы сделать автоматизацию офиса намного чище.
  • У VB есть куча "вспомогательных" функций и классов, таких как пространство имен My; однако все это доступно для С#
  • VB нечувствителен к регистру

Синтаксис С# следует за аналогичной грамматикой c и java, что делает переход гораздо более удобным с этих языков, где VB может быть более удобным для пользователей VB. По производительности, а также библиотеки или компоненты они почти идентичны.

В зависимости от того, какой из них выбрать, если у вас нет необходимости выполнять небезопасные операции, выберите язык, наиболее естественный для вас. После нескольких лет работы в качестве разработчика VB мне нравилось не писать If yadada then..... End If if (yadaya) {....} сохраняет мой запястный туннель несколькими дополнительными нажатиями клавиш (которые затем можно использовать при ответе SO вопросы)

Изменить

Только что узнал еще одну разницу btw С# и VB - это то, что VB поддерживает отфильтрованные исключения, чтобы вы могли что-то вроде этого псевдо:

try
{
   //do something that fails
}
catch(Exception ex when ArgumentException, 
      ArgumentNullException, FormatException)
{
  //Only handle these three types
}

Это не следует путать со способностью:

   try
   { 
      //something that fails
   }
   catch(ArgumentException)
   { 
      //Log Error

   }
   catch(ArgumentNullException)
   {
     //Log Error
   }

В этом случае вы будете обрабатывать исключения по-разному в мире VB, вы можете определить один кусок кода для обработки нескольких типов Исключений.

Изменить

Еще несколько отличий.

  1. Оператор VB Is сравнивает два объекта, чтобы определить, являются ли они одинаковыми, он компилируется в инструкцию CEQ IL, где, когда С# компилируется в isinst IL. Итак, следующие эквивалентные утверждения

С# if (foo is FooObject){}

VB If TypeOf foo is FooObject then

  1. Также, как упоминалось в комментариях, и я хотел бы, чтобы они могли дать вам кредит, но у С# нет подобного параметра. Вы должны использовать класс RegEx.

Ответ 2

Я думаю, что это сообщение в блоге от Kathleen Dollard дает отличный обзор на вопрос:

Что должен знать С# Coder, прежде чем они пишут VB

и ее первый совет:

1) Почувствуйте уважение или прекратите прежде чем ты начнешь. VB - отличный язык.

Ответ 3

Уличное доверие среди выродков.

(И не притворяйтесь, что это не важно!)

Ответ 4

Другие рассмотрели множество различий - как было сказано несколько раз, они почти эквивалентны языкам. Несколько различий, которые не были охвачены, насколько я видел:

VB9 имеет:

  • XML-литералы
  • Mutable anonymous types (urgh)
  • Поддержка LINQ на языке (С# охватывает только несколько операторов)
  • Целая куча дополнительных битов на языке, которые скомпилируются до вызовов в сборку Microsoft.VisualBasic. (С# предпочитает быть небольшим языком с весом платформы .NET за ним.)
  • литералы DateTime

С# 3 имеет:

  • Лучшая поддержка лямбда-выражений: IIRC, вы не можете написать лямбда-выражение с блочным телом в VB.
  • Блоки Iterator.
  • Синтаксис для методов расширения (вместо украшения метода с атрибутом)

Я подозреваю, что есть больше, но я думал, что просто выброшу их в микс.

Ответ 5

Когда вы сталкиваетесь с проблемой, вы часто сможете использовать Google для образца кода, который показывает, как его решить за считанные минуты. Это важный фактор повышения производительности. Когда я работал с Delphi, мне пришлось преобразовать образцы кода из C в Object Pascal - выполнимый, но утомительный, т.е. Много трения. Поэтому не стоит недооценивать тот факт, что...

Подавляющее большинство образцов кода .Net находятся в С#!

Ответ 6

В ранних версиях VB.NET разница была более очевидной, однако с текущей версией существенных различий не было.

VB поддерживает XML-литералы непосредственно в коде, который не поддерживается С#. С# поддерживает небезопасный код, а VB - нет. Технически эти два являются самыми большими различиями. Есть много небольших вариаций, но они не важны. Мне нравится С# больше, потому что я думаю, что синтаксис гораздо менее вздут. Легко распознать блоки кода вместо того, чтобы видеть кучу ключевых слов, но это чистые личные предпочтения.

Выберите тот, с которым вы и ваша команда знакомы.

Ответ 7

У VB.Net есть корневое пространство имен, а у С# - пространство имен по умолчанию, которое не то же самое. Потому что, когда у вас есть корневое пространство имен в VB.Net, оно всегда будет добавлять это перед пространством имен.

Например: если у вас есть имя root в VB.Net с именем namespace1, а затем вы добавляете его в свой файл.

Namespace namespace1
  Public Class class1
  End Class
End Namespace

то вам придется ссылаться на него как namespace1.namespace1.class1

в С#, если у вас есть пространство имен по умолчанию, называемое namespace1, и вы это в своем файле.

namespace namespace1{
  public class class1{}
}

Затем вы можете просто ссылаться на него как namespace1.class1

Ответ 8

Моя любимая особенность С#, которой нет у VB, - это оператор yield. Это позволяет вам легко возвращать лениво оцененный IEnumerable из метода.

Вот статья, которая его охватывает: http://msdn.microsoft.com/en-us/magazine/cc163970.aspx

Ответ 9

У VB лучшая обратная связь с ошибками. В С# вам приходится чаще компилироваться, чтобы получить все ошибки в вашем синтаксисе.

Ответ 10

Большое преимущество, которое я вижу в С#, заключается в том, что подавляющее большинство проектов с открытым исходным кодом, пример кода и фрагменты блога написаны на С#. Хотя его легко конвертировать в VB.NET с помощью инструментов (или вашей головы), это все еще однообразная задача для разработчиков VB (например, я).

Даже если вы каждый день пишете на VB.NET, вам все равно нужно будет читать С#

Технически они имеют одну и ту же инфраструктуру с одинаковыми характеристиками производительности и памяти и системами того же типа, поэтому мне трудно скомпрометировать их.

Большинство хороших разработчиков должны иметь возможность сдвигаться между ними с несколькими настройками времени.

Моя основная фраза заключается в том, что я написал сотни раз:

String lastName as String

и задавался вопросом, почему он никогда не компилируется!

Ответ 11

В С# вы можете иметь более тонкий контроль над событиями/делегатами. Но вам это редко нужно.

Для С# существует намного больше примеров кода.

В VB.Net проще использовать позднюю привязку (много). Например, для COM-объектов (в С# из версии 4.0).

  • Я использую С# для 90% в моих проектах
  • Я использую VB.Net для взаимодействия с Excel и т.д.

Как только я знаю F # лучше, я, вероятно, буду использовать его для тех частей, для которых лучше подходит F #.

Ответ 12

Производительность

Никакой разницы, хотя VB исторически использует странную индексацию в циклах, что означает, что вы должны вычитать 1 из самого высокого индекса большую часть времени:

For i = 0 To someArrayOrString.Length - 1 …

Хотя я сомневаюсь, что это влияет на производительность любым измеримым способом.

С другой стороны, из-за фоновой компиляции, VB фактически компилируется, казалось бы, быстрее. Некоторые люди утверждают, что это заставляет IDE реагировать вяло, но я никогда не замечал этого.

Возможности?

В некоторых случаях оператор С# yield действительно полезен. VB требует более ручной работы здесь. Кроме того, lambdas намного лучше реализованы на С#, особенно синтаксически. Рассмотрим эти два утверждения:

Parallel.For(1, 10000, i => {
    // Do something
});

против

Parallel.For(1, 10000, Sub() _
    ' Do something '
End Sub)

Кроме того, что VB еще не может этого сделать, и что комментарий в этом месте запрещен, он просто более беспорядочен и вообще не работает.

Библиотеки компонентов /?

Одинаковые.

Репутация?

Не важно. "Улица"? Сожалею. Не фактор. Прокажись, Ник.

Надежность? Ремонтопригодность? Простота?

Более или менее тождественно. Я утверждаю, что VB проще, но это может быть предвзятым и каким-либо образом, оно лишь незначительно.

Ответ 13

Как я понимаю, между языками существуют различия, хотя они минимальны. Я бы посоветовал работать с языком, с которым вам или вашим разработчикам было бы комфортно. Если у них уже есть опыт VB, я бы предложил VB.Net/vice-versa.

Хотя я предпочитаю краткий синтаксис С# лично.:)

Ответ 14

Так как С# и VB.Net скомпилированы в MSIL, обе имеют почти идентичную производительность, возможности, библиотеки и компоненты. Reflection может дешифровать код MSIL на С# или VB.NET(или на несколько других языков)

Это в основном оставляет нас, С# очень похож на Java и С++, что дает ему больше доверия.

Ответ 15

Я думаю, что Джош дал хороший рулон для языковых различий.

Поддержка инструментов

Однако существуют и различия в том, как Visual Studio обрабатывает эти языки. Фрагменты кода проще использовать из редактора С#, и рефакторинг также лучше.

VB-редактор упрощает intellisense, не отображая все параметры в любое время.

Я уверен, что есть еще что-то, но это те, которые я, как С# 'er (делаю очень мало VB), заметили.

Ответ 16

Вот еще один момент, еще не затронутый в этом тропе:

Высшая степень работоспособности + лучше (больше) Ресурсы Dev

Теперь я не согласен с этой точкой зрения:

Есть больше магазинов С#, которые продают магазины VB

Некоторые отсталые работодатели С# поставят вас в серьезный недостаток, если вы будете сильнее с VB. Поэтому, возможно, С# - лучший выбор здесь.

С другой стороны, когда вы идете нанимать людей для своего проекта С#, вы сможете привлечь больше кандидатов на это и получить лучшие навыки в результате - я не думаю, что детали следует упускать из виду.

Ответ 17

Я должен сказать, что это был мой опыт использования Google для поиска примеров или документации, которые примеры С# имеют более высокое качество, чем примеры VB. Это не означает, что есть неплохие примеры С#, но если вы ищете что-то вроде "словарного выпадающего списка", добавление С# обеспечит более качественный ответ выше в списке.

Это не относится к примерам, отображающим как код С#, так и код VB рядом.

Ответ 18

на данный момент VB.Net имеет очень плохую реализацию лямбда-выражений. Это означает, что вы не можете делать аккуратные вещи, которые вы можете использовать на С#. Ну, вы можете, но в большинстве случаев ему нужно очень уродливое обходное решение.

Это разрешено в VB.Net 10.0.

Ответ 19

Свободно от старого cruft, объявление массива в С# не дополняется дополнительным элементом. Массив VB.NET дополняется дополнительным элементом, поэтому перенос кода старого VB6 проще.

С# более согласован, чем VB.NET

Button1.Color() = Color.Red
Button1.Color = Color.Red

Я не могу дать ответ, когда один из студентов спросил меня, когда использовать скобки по свойствам VB.NET. Трудно дать проницательные аргументы в пользу такого рода недоразумений.

Согласованность с экземплярами и статическими членами. VB.NET позволяет получить доступ к статическим членам в экземпляре, например. пряжа. Спящий (1000), это ошибка. https://stackoverflow.com/info/312419/language-features-you-should-never-use