Различия в синтаксисе порадовали тем, что они относительно небольшие:
Определение переменных:
VB.NET:
Dim A as String="Hello, World!"
С#:
string a="Hello, World!";
Операторы сравнения:
VB.NET:И все бы ничего, пока не начались казусы, которые в VB.NET показались бы гм... непонятными с точки зрения причины возникновения ошибки:
If A<>"" Then
MessageBox.Show("Hello, World!")
EndIf
C#:
if(A!=""){
MessageBox.Show("Hello, World!");
}
VB.NET:
Dim val as String="Ячейка таблицы: "+Me.DataGridView1.SelectedRows(0).Cells("Customer").Value.ToString()
C#:
String val="Ячейка таблицы: "+this.DataGridView1.SelectedRows[0].Cells['Customer'].Value.ToString();
Вроде бы все одинаково, однако в C# возникает ошибка: "Невозможно преобразовать группу методов ToString" в тип, не являющийся делегатом string. Предполагается ли вызвать объект?"
Что самое потрясающее - это вопрос в... всплывающей подсказке!
В итоге, погуглив немного, решение нашлось:
С#:Но, согласитесь, как минимум, странно. Но что меня добило, это то, что для очистки неиспользуемых ссылок (которая в VB.NET запускается одной кнопкой) в C# предлагается внешняя программа за $350! В общем, благоприятные впечатления от C# постепенно начали рассеиваться. И далее по нарастающей:
String val="Ячейка таблицы: "+Convert.ToString(this.DataGridView1.SelectedRows[0].Cells['Customer'].Value);
Для создания эвента в VB.NET в коде формы создается конструкция типа:
VB.NET:
Private Sub starter() Handles MyBase.Load
...
End Sub
Для C# нужно не только написать обработчик эвента в коде формы:
С#:
void Form1_Load (Object sender, EventArgs e){
...
}
но и прописать его в коде From Designer'а:
C#:
this.Load += new System.EventHandler(this.Form1_Load);
А как быть к примеру для назначения эвентов для двойного клика внутри строки DataGrid?. И если таких эвентов не один и не два? В конечном итоге: C# - это безусловно решение для профессионалов, однако есть ряд моментов, которые вызывают в лучшем случае изумленную улыбку непонимания. У C# есть безусловный плюс в том, что его можно применять не только в среде WinForms, но и в веб- и WPF-приложениях, но те же возможности есть и у VB.NET. Однако проблем при написании - много больше. Вывод прост - пока остаюсь на VB.NET.