Перемещение от C# до [закрытого] VB.Net

Это ребро, но вы также можете получить эту ошибку, если вы создаете приложение MFC с помощью CMake.

В этом случае вам нужно добавить следующие определения:

ADD_DEFINITIONS(-D_AFXDLL) SET(CMAKE_MFC_FLAG 2) # or 1 if you are looking for the static library

Если вы компилируете с помощью unicode, необходимо добавить следующие свойства:

set_target_properties(MyApp PROPERTIES COMPILE_DEFINITIONS _AFXDLL,_UNICODE,UNICODE,_BIND_TO_CURRENT_CRT_VERSION,_BIND_TO_CURRENT_MFC_VERSION LINK_FLAGS "/ENTRY:\"wWinMainCRTStartup\"" )

Soure: FAQ: Как использовать MFC с CMake

15
задан Wilfred Knievel 14 March 2009 в 18:40
поделиться

8 ответов

Опция, Строгая

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

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

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

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

Другая вещь высматривать: равенство по сравнению со ссылочным тестированием. В C# Вы используете == для обоих. В VB у Вас есть отличные операторы:

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

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

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

я на самом деле думаю, что это - преимущество в VB по C#, но один редко необходимый. Противоположность [1 116] IsNot. Другая вещь обратить внимание на вот состоит в том, что сравнение строк через = оператор на самом деле называет метод во время выполнения VB: Microsoft.VisualBasic.CompilerServices.Operators.CompareString.

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

CType по сравнению с [1 124] и TryCast

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

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

Вместо [1 131], я советую использованию [1 132], который является эквивалентом броска C#, или TryCast, который совпадает с C# as преобразование.

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

If TypeOf x Is T Then …

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

Разное †¦

существует намного больше различий, некоторые полезные (например, различия в Select Case оператор) и немного меньше (например, Like, оператор для основного подстановочного знака, соответствующего †¦ просто, использует регулярные выражения вместо этого).

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

25
ответ дан 1 December 2019 в 01:11
поделиться

Проверьте эту ссылку; я полагаю, что это - в значительной степени полное руководство: http://msmvps.com/blogs/kathleen/archive/2008/07/25/what-a-c-coder-should-know-before-they-write-vb-updated.aspx

3
ответ дан 23 October 2019 в 06:29
поделиться

Когда я сделал подобный переключатель, я нашел это мало рядом сравнением особенно полезный: http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

2
ответ дан 23 October 2019 в 06:29
поделиться

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

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

Вывод равняется "12".

не

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

Вывод равняется "13".

<час>

И я рекомендую считать это сообщение в блоге записанный Kathleen Dollard.

, Что Должен Знать Кодер C#, Прежде чем Они VB

Записи Ее первый совет будут:

1) Преобладают над вещью уважения или выходят перед запуском. VB.NET является большим языком.

8
ответ дан 1 December 2019 в 01:11
поделиться

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

Так мой совет не чувствуют, что Вы запишете VB.Net, Вы запишете .NET, но с новым стилем.

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

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

Также несколько преобразователей могут помочь Вам кодирующий быстрее:

Преобразовывают VB.Net в C#, C# к Инструментам VB.Net

3
ответ дан 1 December 2019 в 01:11
поделиться

Специальное уведомление должно быть дано Мое пространство имен : Это так или иначе отсутствует в C# номенклатура, таким образом приезжая оттуда Вы могли бы пропустить этот важный инструмент.

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

три, центральные, Мои объекты, которые обеспечивают доступ к информации и наиболее часто используемой функциональности, являются Моим. Объект приложения, Мой. Компьютерный Объект и Мой. Пользовательский объект. Можно использовать эти объекты получить доступ к информации, которая связана с текущим приложением, компьютер, что приложение установлено на, или текущий пользователь приложения, соответственно.

пример от Работающие Задачи с Моим. Приложение, Мой. Компьютер и Мой. Пользователь :

' 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)
2
ответ дан 1 December 2019 в 01:11
поделиться

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

0
ответ дан 1 December 2019 в 01:11
поделиться

+1 для строгой опции.

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

Удача.

0
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: