Преобразование знания C# на VB.NET какие-либо потенциальные проблемы?

var results = from DataRow myRow in myDataTable.Rows
    where (int)myRow["RowNo"] == 1
    select myRow
9
задан Piotr Czapla 26 August 2009 в 20:25
поделиться

12 ответов

Если вы подходите к VB.Net с мышлением C #, лучше всего установить следующие параметры в проекте

  • Option Strict On
  • Option Explicit On
  • Option Infer On

Это по существу удаляет семантику позднего связывания VB.Net и заставляет его быть строго типизированным языком. Это приблизит его к семантике C # (все еще не совсем точным).

VB.Net поддерживает лямбда-выражения (и, следовательно, закрытие), начиная с выпуска Visual Studio 2008 / .Net Framework 3.5. Не выражение и не заявление. Лямбда-выражения операторов не поддерживаются до VS2010 / .Net Framework 4.0. Хотя вы можете использовать компилятор 4.0 для снижения уровня фреймворков 2.0.

14
ответ дан 4 December 2019 в 07:23
поделиться

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

Да, и у VB.NET есть замыкания. В нем отсутствуют некоторые другие функции C #, такие как ключевое слово yield, лямбда-выражения с несколькими операторами и свойства auto, но ничего очень важного.

0
ответ дан 4 December 2019 в 07:23
поделиться

There are some subtle differences you'll have to watch out for. For example VB.Net has no concept of short circuiting an if statement (I was corrected that apparently it does). If it just a short term project, you probably won't have a problem, but different languages do have different approaches to solving the same problem. An example of this is Python programmers talking about doing things in the "pythonic" way. They talk about this concept in the book Dreaming in Code where java programmers were trying to program java using the python syntax. It leads to taking the long way around to solving a problem. Will this happen with C# and VB.Net? It is hard to say, they both use the underlying frame work, so the differences won't be huge, but it would still help to try and learn how to use VB.NET the way it was intended.

Edit: so apparently, it does has the concept of short circuiting, but it doesn't do this by default where C# does. This just further proves the point of learning how the language functions can be beneficial in the long term.

0
ответ дан 4 December 2019 в 07:23
поделиться

Если вам не хочется писать код vb.net, можно написать свой проект на C #, скомпилировать его и использовать Reflector, чтобы увидеть, как выглядит эквивалент vb.net. Все равно все компилируется в MSIL!

0
ответ дан 4 December 2019 в 07:23
поделиться

Как и любой язык (человеческий или компьютерный), вы сначала учитесь «переводить в уме», а затем, в конце концов, начинаете «думать» на другом языке.

Чем быстрее ваша команда совершит прыжок, тем лучше. Итак, делайте это так же, как специалисты говорят вам изучать человеческий язык: реальные примеры и погружение.

В Интернете доступно несколько утилит преобразования C # в VB.NET, поэтому начните с того, что команда написала на C # , преобразовать в VB.NET и очистить его. (Утилиты преобразования различаются по качеству и имеют некоторые ограничения, особенно с новыми языковыми функциями.)

Как только они освоят базовую "грамматику", бросьте их в VB.NET 100%.

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

1
ответ дан 4 December 2019 в 07:23
поделиться

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

Обратный путь (VB.NET на C #) может быть сложнее, потому что люди могут привыкнуть к использованию пространства имен «My» и других вещей, вставленных в него. там, чтобы разработчики VB6 чувствовали себя как дома.

0
ответ дан 4 December 2019 в 07:23
поделиться

Одна область, которую VB.NET старается скрыть, - это работа с событиями; другие кратко коснулись некоторых различий, но вот немного о них:

VB.NET предоставляет ключевое слово WithEvents для полей, которые вызывают события. Если поле объявлено WithEvents , вы можете добавить поле Handles. Событие до конца метода, сигнатура которого совместима с событием; этот метод будет автоматически делегатом события без необходимости вручную AddHandler и RemoveHandler ( + = и - = ).

Private WithEvents SomeField
Public Sub SomeField_SomeEvent(sender as Object, e as EventArgs) Handles SomeField.SomeEvent
    Console.Writeline("SomeEvent occured")
End Sub

Объявления событий и события вызова немного упрощены. VB.NET не требует, чтобы вы проверяли, является ли событие нулевым до уведомления слушателей:

Public event SomeEvent as EventHandler(of SomeEventArg)
Public Sub SomeMethod()
    RaiseEvent SomeEvent(Me, new EventArgs)
End Sub

Одна «скрытая» функция событий в VB.NET - это доступ к базовому MulticastDelegate , чтобы сделать что-то вроде GetInvocationList () Примечание: событие называется SomeEvent , а код для доступа к multicastdelegate вызывает невидимое поле с именем SomeEventEvent :

Public event SomeEvent as EventHandler(of SomeEventArg)
Public Sub SomeMethod()
    // Note that SomeEvent's MulticastDelegate is accessed by appending
    // another "Event" to the end, this sample is redundant but accurate.
    // If the event was named ListChanged then it would be ListChangedEvent
    dim invocationList = SomeEventEvent.GetInvocationList()
End Sub
3
ответ дан 4 December 2019 в 07:23
поделиться

Одна из самых больших проблем, которые я обнаружил, - это очевидная многословность VB. В нем есть все эти большие ключевые слова, такие как MustInherit , NotInheritable , MustOverride и т. Д., Где в C # есть только такие вещи, как sealed , ] абстрактные и виртуальные . У вас должен быть End для всего ( End Sub , End Function , End While , End Namespace , Конечный класс и т. Д.) И вы должны явно отметить свойства, доступные только для чтения, с помощью ключевого слова ReadOnly ; просто опуская сеттер выиграл ' т летать. Также вспомним AndAlso и OrElse вместо более интуитивных (но без короткого замыкания) And и Or , и таких вещей, как Is Nothing и IsNot Nothing вместо == null или ! = Null .

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

2
ответ дан 4 December 2019 в 07:23
поделиться

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

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

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

Конечно, в VB есть некоторые особенности, на которые следует обратить внимание. Как, например, оператор /, который всегда преобразует оба операнда в двойное,

3
ответ дан 4 December 2019 в 07:23
поделиться

Я считаю, что эта статья полезна для выделения различий. Я программист vb.net, и это помогает мне разобраться в коде C #, поэтому я уверен, что это будет работать по-другому!

http://www.codeproject.com/KB/dotnet/vbnet_c__difference.aspx

1
ответ дан 4 December 2019 в 07:23
поделиться

В январе 2008 г. в журнале Visual Studio было несколько полезных статей.

Вас также может заинтересовать вопрос « что разрешено в VB, что запрещено в C # (или наоборот) »

2
ответ дан 4 December 2019 в 07:23
поделиться

Помимо того, что уже упомянул Джаред, у вас не должно возникнуть проблем с этим. Единственный другой источник раздражения - странные настройки по умолчанию. EG Знаете ли вы, что проекты VB.NET по умолчанию скрывают узел ссылок в обозревателе решений? (вы должны выбрать ShowAllFiles, чтобы увидеть его).

1
ответ дан 4 December 2019 в 07:23
поделиться