Перемещение с С# на VB.Net

Итак, как прямой результат этого глобального финансового хаоса, я собираюсь начать новую работу в качестве разработчика VB.net завтра. До этого момента я развивался в С# (бит java, vb6, sql, tibco и т.д. Здесь и там)

Итак, вопрос в том, каковы же страты, на которые нужно обратить внимание, и есть ли у кого-нибудь хорошие советы по написанию хорошего кода vb.net?

(Любые другие рекомендации о том, как справиться с окладом/перспективами, приветствуются, но не являются существенными; -))


Просто быстрое обновление, компания кажется действительно хорошей, текущая база кода, по-видимому, имеет очень высокое качество. Я начинаю приспосабливаться к VB-способу делать вещи (не останавливайся, добавляя точки с запятой повсюду!). Еще раз спасибо за полезные советы.

Ответы

Ответ 1

Параметр Строгий

Самое главное, что нужно делать в VB, в моем (абсолютно не смиренном) мнении - использовать Option Strict On во все времена (за исключением того, что для каждого файла, когда нестрогий ввод текста имеет смысл, например, потому что вы используете PIA для взаимодействия с MS Office) и включить его в опциях VS.

Option Strict On, вместе с Option Explicit On, дает примерно то же поведение, что и С#. Выключенный, он удаляет много проверок типа во время компиляции и допускает ложные, ненужные и трудно отлаживающие неявные преобразования между полностью несвязанными типами.

Option Strict Off имеет смысл при работе с COM API. Option Explicit Off никогда имеет смысл. Это глупо (и в основном там для совместимости с VB6).

Сравнение: = по сравнению с Is

Еще одна вещь, на которую нужно обратить внимание: равенство или контрольное тестирование. В С# вы используете == для обоих. В VB у вас есть разные операторы:

Dim StringA = "Hello"
Dim StringB = Console.ReadLine()
Dim EqualContent = StringA = StringB
Dim EqualRefs = StringA Is StringB

Теперь, в зависимости от пользовательского ввода, EqualContent может быть True; EqualRefs всегда будет False. Помните, что Is здесь семантически эквивалентен следующему С# -коду (который никто никогда не пишет, обычно):

var equalRefs = object.ReferenceEquals(stringA, stringB);

Я действительно думаю, что это преимущество в VB над С#, но редко требуется. Противоположность Is равна IsNot. Еще одна вещь, на которую нужно обратить внимание, состоит в том, что сравнение строк с помощью оператора = фактически вызывает метод времени выполнения VB: Microsoft.VisualBasic.CompilerServices.Operators.CompareString.

Это учитывает несколько других параметров, особенно параметр Option Compare, который может быть Binary (по умолчанию, поведение, как на С#) или Text (сравнение без учета регистра).

CType по сравнению с DirectCast и TryCast

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

Во-первых, CType позволяет разбор строк для чисел. Это понятие лучше выражено в операции NumberType .Parse, как в С#.

Вместо CType я рекомендую использовать DirectCast, который является эквивалентом С# cast или TryCast, который совпадает с преобразованием С# as.

Еще одна. При проверке того, имеет ли объект x определенный тип T, должен использоваться следующий синтаксис:

If TypeOf x Is T Then …

Обратите внимание, что это не вызывает обычный оператор сравнения ссылок Is. Скорее, он использует собственную конструкцию оператора TypeOf … Is …. Однако вы не можете написать TypeOf … IsNot …. Вероятно, это ошибка в спецификациях.

Разное....

Есть много различий, некоторые полезные (например, различия в инструкции Select Case) и некоторые менее (например, оператор Like для базового сопоставления подстановочных знаков... просто используйте регулярные выражения).

Некоторые другие вопросы, касающиеся этого:

Ответ 2

Только одна маленькая деталь как оговорка. Если вы объявляете массив в VB.NET, число между скобками означает верхний предел, а не количество элементов:

Dim monthNames(11) As String
Console.Write(monthNames.Count)

Выход равен "12".

не

Dim monthNames(12) as String
Console.Write(monthNames.Count)

Выходной сигнал "13".


И я рекомендую вам прочитать это сообщение в блоге, написанное Кэтлин Доллард.

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

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

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

Ответ 3

VB.Net - это .Net-язык, то же, что и С#, но с ароматом vb. Я столкнулся с тем же случаем, что и вы, с 4 лет назад, то, что я сделал, это просто писать с vb.net, я боялся, но когда я начал писать, я обнаружил, что я очень хорош, это то же, что и С# только в первых строках вы напишете ";" и "{}", но через несколько минут вы будете чувствовать себя нормально.

Поэтому мой совет не чувствует, что вы напишете VB.Net, вы напишете .Net, но с новым стилем.

Возможно, вам понадобятся самые простые детали: Как написать функцию Как объявить переменную Как создать событие

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

Кроме того, несколько конвертеров могут помочь вам быстрее кодировать:

Преобразование VB.Net в С#, С# в инструменты VB.Net

Ответ 6

Особое уведомление должно быть указано Мое пространство имен: Это как-то отсутствует в номенклатуре C#, поэтому оттуда вы можете пропустить этот важный инструмент.

Мое пространство имен в Visual Basic предоставляет свойства и методы, которые позволяют вам легко использовать возможности .NET Framework. Мое пространство имен упрощает общие проблемы программирования, часто уменьшая сложную задачу до одной строки кода. Кроме того, пространство имен My полностью расширяется, поэтому вы можете настроить поведение My и добавить новые службы в свою иерархию для адаптации к конкретным потребностям приложений.

Три основных объекта My, которые обеспечивают доступ к информации и часто используемым функциям, - это My.Application Object, My.Computer Object и My.User Object. Вы можете использовать эти объекты для доступа к информации, связанной с текущим приложением, компьютером, на котором установлено приложение, или с текущим пользователем приложения.

Пример из Выполнение задач с My.Application, My.Computer и My.User:

' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
    args &= arg & " "
Next
MsgBox(args)

Ответ 7

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

Ответ 8

+1 для опции strict.

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

Удачи.