C# vs. VB.NET

Windows лучше чем Linux! Чем? Ясно же написано — чем Linux!
Раздуй свой холивар сегодня, потому что завтра это может сделать уже кто-то другой!
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 23.03.2009 (Пн) 16:45

Не согласен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: C# vs. VB.NET

Сообщение Williams » 25.03.2009 (Ср) 9:08

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

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 25.03.2009 (Ср) 20:15

Я вот устроился на работу, и опять таки VB.. И мой начальник очень любит ВБ и главный аргумент: "А что я не могу сделать на ВБ??" Хотя я уже перешел на своих проектах на C#.. Теперь переход откладывается =)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 25.03.2009 (Ср) 20:42

Ronin писал(а):Хотя я уже перешел на своих проектах на C#

А ты в нем что нашел, кроме бОльшего объема документации?

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 14.05.2009 (Чт) 13:41

С уважением,
Игорь Шувалов aka Ronin

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 14.05.2009 (Чт) 17:19

Ronin
Я спросил, что ты нашел, а не кто-то там... тем более на англоязычном форуме.
Я, напрмер, нашел модификатор unsafe и, соответственно, работу с указателями. Но сами же Microsoft убеждают этим не пользоваться.

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 15.05.2009 (Пт) 8:46

Mikle писал(а):Ronin
Я спросил, что ты нашел, а не кто-то там... тем более на англоязычном форуме.
Я, напрмер, нашел модификатор unsafe и, соответственно, работу с указателями. Но сами же Microsoft убеждают этим не пользоваться.


Прости, я не видел твоего вопроса. Да, на самом деле в C# есть работа с unsafe а в VB нет. Но для прикладных задач это преимущество сомнительно. Больше ничего не нашел! =)
А вот в VB нашел весьма полезную штуку - XML literals
А ссылка не на то что кто-то там что-то нашел, а что впредь все фишки будут появляться в обоих языках одновременно.

P.S. Кстати, нифига не перешел, думал что перешел, но когда стало тошно, вернулся на VB. В общем если есть выбор - то однозначно VB!
С уважением,
Игорь Шувалов aka Ronin

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 15.05.2009 (Пт) 10:32

А я изучаю-таки шарп, но не потому, что собираюсь на него переходить, а потому, что присматриваюсь к XNA и SlimDX, а все доки только на шарпе. Кроме того портирую SR2D на шарп для популяризации двига.

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 15.05.2009 (Пт) 10:37

Mikle писал(а):А я изучаю-таки шарп, но не потому, что собираюсь на него переходить, а потому, что присматриваюсь к XNA и SlimDX, а все доки только на шарпе. Кроме того портирую SR2D на шарп для популяризации двига.


Доки на C# для VB читаются абсолютно одинаково.. Скажу больше, я только сегодня читаю статью, рассказываю что-то коллеге, показываю код.. А потом он говорит: так это ж C#.. Блин а я и не заметил. Достаточно прочитать сопоставленный список ключевых слов - Static - Shared и т.д.

P.S. А зачем портировать движок на C#? Он что с открытым кодом? Или ты имел ввиду примеры для движка?
С уважением,
Игорь Шувалов aka Ronin

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 15.05.2009 (Пт) 10:49

Движок состоит из DLL и порта, порт - это просто подключаемый модуль, придающий нативной DLL ООП игтерфейс и защищающий от некорректного вызова. Если я просто дам DLL и подробное описание ее ф-ций - этим мало кто будет пользоваться, другое дело, когда есть удобный порт с интуитивно понятным и ОЧЕНЬ ПРОСТЫМ интерфейсом.

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 15.05.2009 (Пт) 11:31

Mikle писал(а):Движок состоит из DLL и порта, порт - это просто подключаемый модуль, придающий нативной DLL ООП игтерфейс и защищающий от некорректного вызова. Если я просто дам DLL и подробное описание ее ф-ций - этим мало кто будет пользоваться, другое дело, когда есть удобный порт с интуитивно понятным и ОЧЕНЬ ПРОСТЫМ интерфейсом.


То есть ты создаешь Interop (обертку, интерфейс) для своей DLL? Почему не создать SR2D.Interop.dll и распространять? И ничего не надо на C# писать, кроме примеров
С уважением,
Игорь Шувалов aka Ronin

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 16.05.2009 (Сб) 11:04

Я стремлюсь к тому, чтобы пользователю приходилось регистрировать минимум DLL, сам не люблю, когда скачав чей-то пример, я еще должен что-то установить в систему, чтобы все работало.

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 16.05.2009 (Сб) 12:53

Mikle писал(а):Я стремлюсь к тому, чтобы пользователю приходилось регистрировать минимум DLL, сам не люблю, когда скачав чей-то пример, я еще должен что-то установить в систему, чтобы все работало.


Регистрировать ничего не надо. Он просто подключает к проекту твою Interop сборку и работает
С уважением,
Игорь Шувалов aka Ronin

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 17.05.2009 (Вс) 18:43

То есть это DLL, которая может сшиваться с NET проектом? Можно чуть подробнее, я с этой технологией не знаком.

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: C# vs. VB.NET

Сообщение Ronin » 18.05.2009 (Пн) 8:59

Mikle писал(а):То есть это DLL, которая может сшиваться с NET проектом? Можно чуть подробнее, я с этой технологией не знаком.


Ну конечно! Ты пишешь обертку на .NET (Ту библиотеку, где DLLImport) компилишь и все! .NET разработчики скачивают твою DLL и твою .NET обертку. Подключают твою обертку к себе в проект и прекрасненько работают!
С уважением,
Игорь Шувалов aka Ronin

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: C# vs. VB.NET

Сообщение ASD » 22.05.2009 (Пт) 13:04

Более того всякие штуки типа SmartAssambly умеют мерджить все dll а 1 exe.
Moderator VBStreets
---------------------------

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 05.08.2011 (Пт) 18:39

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

tyomitch писал(а):Факт, что новые .нет-ские фишки сначала возникают в C#, и только потом переносятся в VB.net
В результате, последний по накачанности всё время отстаёт.

Не знаю как новые, а вот старые - наоборот.
Опциональные параметры добавлены в C# только в VS2010, тип dynamic - тоже. А VB они были :)
И отставания на данный момент (VS2010) никаго не вижу.

Напишу, что для меня имеет значение:
  1. VB:better
    Отсутствие необходимости явного приведения типов.
  2. VB:ok, C#:fail
    Область видимости метки:
    Код: Выделить всё
    GoTo QQQ
    If False Then
      QQQ: MsgBox("Не сделать так на C#!")
    End If
    Код: Выделить всё
    goto QQQ;
    if (false)
      {
        QQQ: MessageBox.Show("Error + 2 warnings");
      }
  3. VB:better
    Возможность использования операторов сравнения со строками
  4. VB:ok, C#:fail
    Использование переменной, инициализируемой в ветви If при том, что истинность условия этой ветви гарантируется некоторым способом.
    Ошибка вместо предупреждения на неинициализированные переменные - это неправильно.
    То же и про возвращаемое значение.
  5. VB:better
    Возможность создания модулей.
  6. C#:better Both:ok
    Наличие условного оператора.
  7. VB:better
    Приведение Boolean <-> Integer
  8. C#:better
    Неявное приведение char -> int.
  9. C#:better
    Наличие unchecked.
  10. VB:better
    Наличие блока With.
  11. C#:ok, VB:fail Both:ok
    Команда может начинаться со скобки или new.
    Код: Выделить всё
    Call (New Cls()).DoIt()
  12. C#:better, точнее - недоработка класса String в .NET
    Метод Split класса String не может принимать единственным аргументом строку.
    Пожалуй, это единственный случай, когда неявное преобразование String <-> Char() реально вредит.
  13. VB:better
    Возможность использования Dim Smth As New Something, что выглядит приятне, чем var в C#.
  14. C#:better
    Целый ряд ограничений на цикл For в VB:
    Код: Выделить всё
    Dim I(1) As Integer
    For I(0) = 0 To 10
      For I(1) = 0 To 10
      Next I(1)
    Next I(0)

    For Q As UInt16 = 10 To 7 Step -1
    Next Q

    For Ch As Char = "a"c To "z"c
    Next Ch
  15. C#:better
    Возможность множественного присваивания.
    Возможность использования присваивания при передаче аргумента по значению (тут недоработка С# - в C++ можно было и по ссылке) или в условии.
    Понятно, что одинаковый символ присваивания и сравнения мешает сделать это в полном объёме, однако смысла запрещать конструкции типа If (X+=Y) > Z Then не вижу. Можно и для присваивания что-нибудь придумать.
  16. VB:better
    Возможность использования диапазона в Select Case.
  17. C#:better
    Можно легко определить массив нулевой длины не рассматривая это как особый случай.
  18. C#:better Both:
    Невозможно использовать логическое Не к целым числам, как в Си.
Не уверен, что это всё, но что-то ещё пока в голову не приходит.

PS: Если я что-то не знаю или написал неправильно, пожалуйста, напишите.
Последний раз редактировалось Qwertiy 23.08.2011 (Вт) 21:37, всего редактировалось 3 раз(а).

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: C# vs. VB.NET

Сообщение FaKk2 » 05.08.2011 (Пт) 19:51

Чушь какая-то. В C# опциональные параметры и dynamic появились не просто так, а потому что они нужны для работы с COM. В каждой новой версии языка присутствует большая фича и несколько сопутствующих: в 2.0 это были генерики, в 3.0 LINQ, 4.0 COM, а в 5.0 будет нативная поддержка асинхронности.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 05.08.2011 (Пт) 23:35

FaKk2 писал(а):Чушь какая-то. В C# опциональные параметры и dynamic появились не просто так, а потому что они нужны для работы с COM.

Я и не говорил, что просто так. Очень даже полезные и удобные вещи. Я сказал, что в C# они появились в VS2010, а в VB.NET были уже в VS2005.

PS: А что Вы думаете про остальные пункты?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.08.2011 (Вс) 19:15

Qwertiy писал(а):Не уверен, что это всё, но что-то ещё пока в голову не приходит.

Ещё вспомнил про условный оператор. Очень его в VB не хватает.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: C# vs. VB.NET

Сообщение FireFenix » 07.08.2011 (Вс) 20:49

Qwertiy писал(а):C#:better
Наличие логического Not

???
Код: Выделить всё
MsgBox(Not True) -> False


C#: unsafe и fixed
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.08.2011 (Пн) 0:34

FireFenix писал(а):
Qwertiy писал(а):C#:better
Наличие логического Not

???
Код: Выделить всё
MsgBox(Not True) -> False

Не это имелось в виду... Подразумевалось применение логической операции отрицания к целому числу, как в Си.
Хотя я написал чушь - в C# его тоже нет в таком виде. Просто, когда C# не компилирует соответствующий код, это быстро исправляешь и забываешь, а в VB как-то почаса искал, почему не работает код, содержащий строку If Not A.Length Then...

FireFenix писал(а):C#: unsafe и fixed

Про unsafe знал, но использовать не приходилось.

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: C# vs. VB.NET

Сообщение FaKk2 » 08.08.2011 (Пн) 1:28

If Not A.Length Then

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: C# vs. VB.NET

Сообщение Mikle » 08.08.2011 (Пн) 9:09

"Select Case" лучше, чем "switch" не только возможностью применить диапазон. В "Select Case" можно использовать даже объектные переменные, для которых определены операторы сравнения. В "Select Case" не нужен "break" в каждом пункте, который в "switch" притянут за уши вместо того, чтобы сделать нормальное перечисление.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.08.2011 (Пн) 15:16

Mikle писал(а):"Select Case" лучше, чем "switch" не только возможностью применить диапазон. В "Select Case" можно использовать даже объектные переменные, для которых определены операторы сравнения.

Не использовал его так.

Mikle писал(а):В "Select Case" не нужен "break" в каждом пункте, который в "switch" притянут за уши вместо того, чтобы сделать нормальное перечисление.

Тут немного другая история... C# по сути использует синтаксис Си++, в котором break необязателен. Но Microsoft сильно урезала возможности Си++. Конкретно в случае switch они решили, что break часто забывают поставить, поэтому его следует сделать обязательным. С другой стороны, нельзя сделать отсутствие break'а завершением switch'а, т. к. это противоречит логике Си. Кстати, C# позволяет использовать явный переход к другой метке
Код: Выделить всё
switch (x)
  {
  case 1:
    dosmth1();
    goto case 3;
  case 3:
    dosmth2();
    break;
  }
а в VB я такой возможности не нашёл.

Только что выяснил, что в C# нельзя использовать операторы сравнения (больше, меньше и т. д.) со строками. Он нравится мне всё меньше и меньше...

PS: Немного изменил своё сообщение со списком различий:
Qwertiy писал(а):VB:better
Возможность использования операторов сравнения со строками.
Qwertiy писал(а):C#:better
Наличие условного оператора.
Qwertiy писал(а):C#:better Both:
Невозможно использовать логическое Не к целым числам, как в Си.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.08.2011 (Пн) 15:30

Qwertiy писал(а):
tyomitch писал(а):Факт, что новые .нет-ские фишки сначала возникают в C#, и только потом переносятся в VB.net
В результате, последний по накачанности всё время отстаёт.

Не знаю как новые, а вот старые - наоборот.
Опциональные параметры добавлены в C# только в VS2010, тип dynamic - тоже. А VB они были :)

Ещё на эту тему: Возможность помещения функций в структуру в C#2005 отсутствовала, а в VB2005 была. В C#2010 есть.

С C# работает принцип "сначала всё выкинем, а потом, по мере необходимости, будем возвращать". VB.NET же сохранил определённые возможности и традиции VB6, правда, значительно изменив его. Вообще, стоило бы сохранить из VB6 возможности рисования на форме (в первую очередь PSet) и возможность использования нижней границы массива.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: C# vs. VB.NET

Сообщение Viper » 08.08.2011 (Пн) 19:54

Qwertiy писал(а):Ещё вспомнил про условный оператор. Очень его в VB не хватает.
Вполне есть он там
Код: Выделить всё
a = If(b > 0, 1, -1)
Весь мир матрица, а мы в нем потоки байтов!

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: C# vs. VB.NET

Сообщение Proxy » 08.08.2011 (Пн) 20:13

Viper писал(а):Вполне есть он там

А этого я не понимю, с iif же выглядело гораздо лучше, разве нет? Зачем было делать двойную нагрузку на "if"?
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: C# vs. VB.NET

Сообщение Хакер » 08.08.2011 (Пн) 20:41

Proxy писал(а):А этого я не понимю, с iif же выглядело гораздо лучше, разве нет?

iif для этой роли создаёт ещё одну проблему переносимости с VB6 под VB.NET
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.08.2011 (Пн) 21:06

Viper писал(а):Вполне есть он там
Код: Выделить всё
a = If(b > 0, 1, -1)

Спасибо, не знал.

Пред.След.

Вернуться в Holy Wars@VBStreets

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList