С# край над 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, вы можете определить один кусок кода для обработки нескольких типов Исключений.
Изменить
Еще несколько отличий.
- Оператор VB Is сравнивает два объекта, чтобы определить, являются ли они одинаковыми, он компилируется в инструкцию CEQ IL, где, когда С# компилируется в isinst IL. Итак, следующие эквивалентные утверждения
С#
if (foo is FooObject){}
VB
If TypeOf foo is FooObject then
- Также, как упоминалось в комментариях, и я хотел бы, чтобы они могли дать вам кредит, но у С# нет подобного параметра. Вы должны использовать класс 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