Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 
   Именно такое чувство возникло у меня в конце первого дня знакомства с Visual Basic 7.0 из нового пакета Visual Studio.net. На утро второго дня я написал эту статью. Но это всё конечно эмоции,... а теперь давайте все по порядку.
   В начале несколько слов о себе. Я программирую на VB очень давно (начинал ещё на 4 версии) и это между прочим моя работа. Число проектов которые я написал давным-давно измеряется сотнями. О Visual Studio.net конечно тоже услышал своевременно, но сказать по правде времени играться с демонстрационными версиями просто не было. И вот теперь вышла первая боевая версия (ох сколько будет сервис паков - это сразу заметно). Первое моё желание было (и это вполне естественно) - Установить и поскорее. Но вот тут не торопитесь...
Ссылка "Установить" в окне Setup-а просто не будет доступна если Вы не предъявите требуемую версию операционки. Я испытал это на всех трех своих Windows.
  • Под NT 4.0 необходим SP6a
  • Под 98-ую необходим SP1
  • Под 2000-ую необходим SP2
  • (про другие операционки не скажу - не пробовал)
  • Далее необходим Internet Explorer версии 6.0
   Примечание: все вышеперечисленные абгрейты есть на диске #5 VSN, но только на английские версии, под русские это не катит. IE6 конечно поставился, но увидев его английский интерфейс я сразу принял решение - Выбросить, с чем и возникли некоторые проблемы. Русская версия не захотела ставиться поверх, кнопки "удалить IE6ing" тоже не было и пришлось заходить с черного хода (но это уже совсем другая история). Короче говоря - я продолжил эксперимент с VSN под 2000-ой русской + SP2 и + IE6 (тоже русский).
   Далее необходим Windows Installer версии 2.0
   На диске #5 VSN есть таковой и он вполне подошел.
   Только после всех вышеперечисленных мной приготовлений я смог с трепетом кликнуть эту вожделенную ссылку Установить (о как я был тогда доверчив).
   Я не буду в деталях описывать процесс установки, по той простой причине, что попросту не запомнил все с первого раза. Первые впечатления примерно такие. Приходилось менять конечно диски, но это напрягало несильно. В целом все прошло гладко, но только со второй попытки (первая попытка прошла успешно - судя по сообщению программы установки - но кроме подготовки файловой системы компьютера я не увидел больше ничего - хотя может сам в этом виноват - не то нажал). И наконец самое яркое моё впечатление - И чем падло занимается там этот самый Setup. Судя по свободному дисковому пространству на моём ПК (да диске установки было свободно всего 500М) все должно было пройти достаточно быстро. Но я попросту задолбался ждать. Судя по всему (это мои предположения) процесс установки проходил примерно так. Сначала все CAB-ы были переписаны на винт - с них и производилась установка. Далее следовала уборка мусора из временных каталогов. Ну и в завершение (дабы быть истинным джентльменом) Setup попросту врубил дефрагментатор.
   Кстати о дисковом пространстве. Для установки "по умолчанию" требуется 1,3G на винте, причем на одном. У меня было только 500М. Я сильно порезал список устанавливаемых компонентов и вложился в 300М. Последующие доустановки позволяют изменить диск и каталог. Кроме того имеется возможность запускать отдельные компоненты с CD-ROMа (в окне устанавливаемых компонентов есть такая опция, но нашел я её чисто случайно). С другой стороны опция "запускать с CD-ROM" не дает большой экономии диска (на файлах справки например всего 50% от размера этих самых файлов).
   Ну вот все установлено. И вот тут и начались самые большие мои разочарования. Скажу сразу. Visual Basic-а больше нет, как нет впрочем больше и Visual C++. Есть некий мутант - гибрид, который именуется теперь Visual Net. Причем этот самый VN очень сильно напоминает мне Си в самых страшных моих кошмарах, от Бейсика только одни ушки остались и еще может быть фамилия.
   После запуска оболочки на меня смотрел, в натуре, Visual C++ (если судить по набору доступных команд) с очень плоской графикой (имеется ввиду графическое оформление интерфейса пользователя). Поскольку я в своей жизни несколько раз уже загружал VC, например 6 версии, я достаточно быстро разобрался с этим делом и соорудил новый проект, выбрав опцию VB проект в списке шаблонов проектов (ха-ха: рядом была опция ). Как и в VB мне сразу была предоставлена новая форма Form1. Список контролов "по умолчанию" меня поверг в шок. Конечно он сильно возрос - недолго и запутаться (количество вытесняющее качество). Многие контролы поменяли имена. Например CommandButton теперь называется просто Button (теперь даже короче чем у Borland-а в Delphi - ну просто впереди планеты всей). Имена свойств тоже серьезно обновлены. Например свойства Caption больше нет - есть только свойство Text (да здравствует полная унификация и стандартизация - Ура дорогие товарищи!!!). Как говорится в таких случаях - забудьте все что Вы учили в школе. Я попробовал открыть страницу кода. Она есть по-прежнему. Я открыл её - но очень сильно испугался, а потому сразу закрыл. Вы спросите меня чего я испугался - а того что там уже написано, хотя я ещё ничего и не писал.
   Дабы разобраться с кодом я решил применить забавный вариант. Я загрузил VB6 (он был в норме после установки VSN) и создал новый проект, разместив на форме кнопку и метку. Дальше связал это дело таким кодом (просто, дешево и сердито):

Private St As Integer 'Это будет счетчик

Private Sub Command1_Click() '+1 в счетчике
   St = St + 1
   Label1.Caption = St
End Sub

   Нажал на кнопку Start и сразу (!!!) убедился что все работает ( умели же делать вещи в 14 году). Далее я сохранил проект и перегрузился в VN.
   При попытке открыть проект VB6 в VN, был запущен соответствующий визард, который судя по сообщениям и длительному похрюкиванию моего винта изрядно попотел над процессом преобразования. Я сразу взглянул на свой новый исходник и снова испугался: Ну и намутили!!! Я не буду это комментировать, лучше посмотрите сами. Старый исходник видели?

Option Strict Off
Option Explicit On
Friend Class Form1
    Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
    Public Sub New()
       MyBase.New()
       If m_vb6FormDefInstance Is Nothing Then
          If m_InitializingDefInstance Then
             m_vb6FormDefInstance = Me
          Else
             Try
                'For the start-up form, the first instance created is the default instance.
                If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
                   m_vb6FormDefInstance = Me
                End If
             Catch
             End Try
          End If
       End If
       'This call is required by the Windows Form Designer.
       InitializeComponent()
    End Sub
    'Form overrides dispose to clean up the component list.
    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
    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer
    Public ToolTip1 As System.Windows.Forms.ToolTip
    Public WithEvents Command1 As System.Windows.Forms.Button
    Public WithEvents Label1 As System.Windows.Forms.Label
    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
       Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
       Me.components = New System.ComponentModel.Container()
       Me.ToolTip1 = New System.Windows.Forms.ToolTip(components)
       Me.ToolTip1.Active = True
       Me.Command1 = New System.Windows.Forms.Button
       Me.Label1 = New System.Windows.Forms.Label
       Me.Text = "Form1"
       Me.ClientSize = New System.Drawing.Size(135, 66)
       Me.Location = New System.Drawing.Point(4, 23)
       Me.StartPosition = System.Windows.Forms.FormStartPosition.WindowsDefaultLocation
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.BackColor = System.Drawing.SystemColors.Control
       Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable
       Me.ControlBox = True
       Me.Enabled = True
       Me.KeyPreview = False
       Me.MaximizeBox = True
       Me.MinimizeBox = True
       Me.Cursor = System.Windows.Forms.Cursors.Default
       Me.RightToLeft = System.Windows.Forms.RightToLeft.No
       Me.ShowInTaskbar = True
       Me.HelpButton = False
       Me.WindowState = System.Windows.Forms.FormWindowState.Normal
       Me.Name = "Form1"
       Me.Command1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
       Me.Command1.Text = "Command1"
       Me.Command1.Size = New System.Drawing.Size(105, 25)
       Me.Command1.Location = New System.Drawing.Point(0, 32)
       Me.Command1.TabIndex = 1
       Me.Command1.BackColor = System.Drawing.SystemColors.Control
       Me.Command1.CausesValidation = True
       Me.Command1.Enabled = True
       Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText
       Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
       Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
       Me.Command1.TabStop = True
       Me.Command1.Name = "Command1"
       Me.Label1.Text = "Label1"
       Me.Label1.Size = New System.Drawing.Size(97, 17)
       Me.Label1.Location = New System.Drawing.Point(8, 8)
       Me.Label1.TabIndex = 0
       Me.Label1.TextAlign = System.Drawing.ContentAlignment.TopLeft
       Me.Label1.BackColor = System.Drawing.SystemColors.Control
       Me.Label1.Enabled = True
       Me.Label1.ForeColor = System.Drawing.SystemColors.ControlText
       Me.Label1.Cursor = System.Windows.Forms.Cursors.Default
       Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No
       Me.Label1.UseMnemonic = True
       Me.Label1.Visible = True
       Me.Label1.AutoSize = False
       Me.Label1.BorderStyle = System.Windows.Forms.BorderStyle.None
       Me.Label1.Name = "Label1"
       Me.Controls.Add(Command1)
       Me.Controls.Add(Label1)
    End Sub
#End Region
#Region "Upgrade Support "
    Private Shared m_vb6FormDefInstance As Form1
    Private Shared m_InitializingDefInstance As Boolean
    Public Shared Property DefInstance() As Form1
       Get
          If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
             m_InitializingDefInstance = True
             m_vb6FormDefInstance = New Form1()
             m_InitializingDefInstance = False
          End If
          DefInstance = m_vb6FormDefInstance
       End Get
       Set
          m_vb6FormDefInstance = Value
       End Set
    End Property
#End Region
    Private St As Short 'Это будет счетчик
    
    Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click '+1 в счетчтке
       St = St + 1
       Label1.Text = CStr(St)
    End Sub
End Class

   Короче говоря ненужного кода как в обычном Си проекте, а может и больше.
   Ну исходник исходником, а будет ли это работать. Так, где тут кнопка Start - есть, жмем. Снизу экрана появилось окно по которому поехал протокол компилятора (ну Си даже в Африке Си,.. и не какой это не бейсик). Протокол проехал и все остановилось - а где выполнение программы? Я успел еще несколько раз нажать на кнопку Start - абсолютно ничего не происходило - ??? Только потом я разобрался в чем тут дело. На таком простом проекте между нажатием кнопки Start и тем моментом когда Вы увидите шоу на экране проходит 10 - 12 секунд (время я измерял несколько раз). А если проект будет большой и сложный?!
   Теперь "хорошие" новости. Компилировать программы больше не надо. Это происходит автоматически, при нажатии кнопки Start. Этот файл собственно и запускается - а от того и такие задержки. Так всегда делал Си. Но он делал это лучше. Полученный *.exe файл (его можно найти внутри папки сохранения проекта) у Си был работоспособен и на другом компьютере (все в одном). А файл а-ля VB-VN требует MSCOREE.DLL (вот Вам и ушки от бейсика - на закуску). Кстати, вглядитесь внимательно в это имя. Кора от Майкрософт - не правда ли.
   Ну что?. Самое время финалить мою статью. Новый Бейсик (если конечно это он) утратил все свои преимущества. Вы хотите быстро написать качественное приложение? Вы хотите отшлифовать свою программу до мелочей, постоянно изменяя, запуская и проверяя? Забудьте об этом. Лучше запаситесь терпением, водкой и на крайний случай (если водка не спасет от мутного исходника), забронируйте себе место в дур доме.
   А чем все закончится? Тут все просто. Жизнь все расставит на свои места. Повального переучивания программистов с VB6 на VN попросту не будет. VB6 вполне успешно протянет еще год-два. За это время Майкрософт даст откат от своей объектно - ориентированной политики в области бейсика. А уж если она этого не сделает - Borland Delphi станет монополистом рынка программных продуктов этого класса для PC.
 
     

   
   
     
  VBNet рекомендует