Трудности перехода на VB .NET

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

Поверьте, этот путь ведет в тупик. Чтобы в полной мере использовать преимущества VB .NET, необходимо основательно разобраться в объектно-ориентированном программировании и принципах работы .NET Framework. Вам не придется запоминать тысячи методов, входящих в .NET Framework, но для сознательного чтения документации или использования средств IntelliSense, встроенных в IDE, нужно знать, как работает .NET. Без хорошего понимания этого материала вы попросту не сможете работать в IDE с дизайнерами форм Windows и Web.

Чтобы представить масштаб изменений, достаточно рассмотреть простейший пример — форму, на которой находится кнопка. В прежних версиях VB весь код, связанный с кнопкой (и выполнявшийся при ее нажатии), находился в процедуре события Click.

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

Приведенный ниже фрагмент (в основном автоматически сгенерированный) размещает кнопку на форме и выводит окно сообщения при нажатии кнопки. Числа в скобках к программе не относятся, они просто используются для ссылок на строки листинга в тексте книги.

(1) Public Class Form1

(2) Inherits System.Windows.Forms.Form

(3) #Region " Windows Form Designer generated code "

(4) Public Sub New()

(5) MyBase.New()

' Вызов необходим для работы дизайнера форм Windows

(6) InitializeComponent()

' Дальнейшая инициализация выполняется ' после вызова InitializeComponent()

End Sub

' Форма переопределяет Dispose для очистки списка компонентов.

(7) Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then

If Not (components Is Nothing) Then

components. Dispose() End If End If

MyBase.Dispose(disposing) End Sub

(8) Friend WithEvents Buttonl As System.Windows.Forms.Button

' Необходимо для работы дизайнера форм Windows

Private components As System.ComponentModel.Container

' ВНИМАНИЕ: следующий фрагмент необходим для дизайнера форм Windows

' Для его модификации следует использовать дизайнер форм.

' Не изменяйте его в редакторе!

(9) <System.Diagnostics.DebuggerStepThrough()> Private Sub _

InitializeComponent()

'

'Button1

'

Me.Buttonl.Location = New System.Drawing.Point(109, 224)

Me.Buttonl.Name = "Buttonl"

Me.Button1.Size - New System.Drawing.Size(200. 48)

Me.Button1.TabIndex = 0,

Me. Button1. Text = "Click me!"

'

'Form1

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5. 13)

Me.ClientSize = New System.Drawing.Size(292. 216)

Me.Controls.AddRange(New System.windows.Forms.Control() {Me.Button1})

Me.Name = "Forml"

Me.Text = "First windows Application"

Me.ResumeLayout (False)

End Sub #End Region

(10) Private Sub Buttonl_C1ick(ByVal sender As System.Object._

ByVal e As System.EventArgs) Handles Buttonl_Click

MsgBox("Welcome to Visual Basic .NET!")

End Sub

(11) End Class

  1. Классы рассматриваются в главе 4.
  2. Ключевое слово Inherits описано в главе 5, а формы Windows — в главе 8.
  3. Новая среда программирования позволяет определять сворачиваемые фрагменты кода (глава 2).
  4. Конструктор New рассматривается в главе 4.
  5. В этой строке используется механизм наследования (глава 5).
  6. Описание форм Windows приведено в главе 8.
  7. Наследование рассматривается в главе 5, а метод Dispose упоминается в главах 4 и 5.
  8. События описаны в главе 6. Специфика обработки событий в приложениях GUI рассматривается в главе 8.
  9. Весь содержательный код этой процедуры проанализирован в главе 8.
  10. См. главу 8.
  11. Классы рассматриваются в главе 4.

 

Сравнение С# с VB .NET

Картина была бы неполной, если бы мы не упомянули о С#. Большая часть .NET Framework написана на С#, поэтому некоторые полагают, что именно С# является настоящим языком .NET. Хотя С# чуть мощнее VB .NET, 99% программистов никогда не будут пользоваться его дополнительными возможностями.

Тому, кто никогда не программировал на C/C++, язык С# может показаться непонятным и более сложным, чем VB .NET. Кроме того, VB .NET имеет ряд несомненных преимуществ перед С#. Ниже перечислены пять из них, которые нам кажутся самыми важными:

  1. Присутствие многих знакомых функций VB/VBScript (таких, как Mid, Sin(x) вместо Math.Sin(x) или FormatNumber) вместо сложных и порой менее удобных функций .NET Framework.
  2. Наглядность. В VB .NET многие понятия записываются простым естественным языком. Например, вместо конструкции С# «:» в VB .NET используются слова Inherits или Implements. В С# используются мудреные слова abstract, sealed и virtual, а в VB .NET — Must Inherit, Nonlnheritable, Overridable, Overrides, Shadows. Несомненно, второй набор выглядит понятнее, даже если не знать, что означают эти термины.
  3. Компиляция кода происходит в фоновом режиме, поэтому вы получаете немедленный отклик от компилятора (что гораздо лучше простого лексического анализа кода, как в С#).
  4. В VB .NET не учитывается регистр символов, а интеллектуальный редактор автоматически изменяет регистр в соответствии с объявлениями. С#, как и все языки семейства С, чувствителен к регистру символов. Людей, привыкших работать в VB, это сильно раздражает. Мы подошли к последней, самой главной причине:
  5. VB .NET сохранил общее сходство с Visual Basic 6, самым популярным языком программирования в мире!