Все уже знают, что Микрософт готовит нам подарок в виде новой версии Visual Studio , которая должна выйти в следующем году. Эта версия имеет название .NET , именно так, с точкой впереди, которую произносят как "дот". Я уже писал с полгода назад о новшествах, которые поджидают нас внутри нового бэйсика. Новая информация продолжает поступать с каждым днем. Сегодня я получил первую бэтта версию .Net . Расчитываю "потрогать" и рассказать вам о ней побольше. А сейчас , информация опубликованная в Visual Basic Programmer Jourmal . Как уже сейчас начать готовится к переходу на новую версию . Можете быть уверены в одном - ваши сегодняшние программы не будут работать в VB.NET, даже если Микрософт таки доделает обещанный инструмент для конвертации приложений из более ранних версий Вы можете начать пользоваться несколькими нехитрыми приемами уже сейчас, чтобы облегчить себе переход на новый синтаксис и стандарт языка. Несомненно, это не снимет всех проблем, но позволит сэкономить некоторое время при конвертации и сделает это процесс чуть легче. Ниже вы найдете 10 реальных предложений, реализовать которые можно уже сегодня . Возможно вы уже пользуетесь некоторыми из этих советов, так как уже долгое время писать так код считается "хорошей практикой", другие советы будут для вас внове.
VB6 и более ранние версии позволяют вам писать код использующий свойства и методы, работающие по умолчанию. lblTitle - это Label control:
Сейчас это работает, так как свойство Caption является свойством этого контрола по умолчанию. В реальности должно быть написано так :
VB.NET не приемлит такого обращения. Так что это первое, что не будет там работать. Так что, уже прямо сегодня начинаем указывать все свойства, к которым обращаемся Множество программистов пользуются сокрашениями при использовании обьектов доступа к данным:
Коллекция
Fields работает по умолчанию для обьекта Recordset. Базируясь на последней
информации - такого типа сокращения будут таки работать и в VB.NET.
Сегодня, обьявляя аррей в VB6 вы получаете один, как бы лишний, элемент . Т.е. строка
создаст вам массив из шести элементов начиная с 0 Потеря последнего элемента в коде легко может привести к неработоспособности программ. Конвертация старого кода в новый стандарт принесет много головной боли. Предлагаю прекратить использовать последний элемент массивов уже теперь. Это не поможет решить проблему со старым кодом, но написанный сегодня вы сможете не править.
С первой версии Бэйсика контролы на формах имеют статус Public . Нередко в модулях(.bas) находятся строки такого типа:
Скажите до свидания. Это больше не работает в VB.NET. Вы можете заставить этот код работать, только если пропишете контрол txtTitle на форме frmArticleEntry как Public Shared. Но это не лучшее решение. Начиная с четвертой версии профессионалы рекомендуют использовать для доступа к контролам на форме отдельные процедуры - свойства. Код извне формы работает (читает и пишет) в эти контролы через стандартные процедуры Предположим, на форме frmOptions вы имеете 5 option buttons, названных optFormat(0) - optFormat(4), позволяющих пользователю задать тип репорта . И вам необходимо прочитать эти значения снаружи формы - например из BAS модуля. По старому, это бы выглядело так:
Позже , возмождно, вы захотите изменить имена контролов или номера option buttons. Или даже вы вовсе захотите убрать их и поставить комбобокс со списком значений форматов репорта. В этом случае вам прийдется менять такой код не только на самой форме, но и в модуле. Вместо этого, возможно использование специально созданного свойства формы . Достаточно разместить на форме такой код:
Теперь вызов снаружи приобретет понятный и простой вид :
Если вы соберетесь менять что либо на форме, касательно Format Type, достаточно исправить процедуру свойство . К примеру, как использовать combo box?:
А код вызова , расположенный снаружи не нуждается в изменениях. В идеале процедура - свойство должна содержить еще и и обработку ошибок. Таким же образом создается и процедура Let, для присвоения значений извне формы. Эта дополнительная работа может принести вам пользу при использовании уже сейчас. Не так ли?
Сегодня , если вы опускаете описание типа передачи параметра ByRef или ByVal , то передача происходит в зависимости от того , что за параметр вы передаете. Внутренние типы (integer, long, Boolean, string, и так далее) передаются по умолчанию ByRef. В остальных случаях передача происходит по значению . Это позволяет, к примеру, передать параметр в процедуру, там его изменить и вернуть назад. Это весьма неряшливая практика, и VB.Net - хороший повод прекратить такое безобразие. В VB.NET, все параметры передаются ByVal по умолчанию .Чтобы позволить
процедуре изменить и вернуть измененный параметр вы должны прямо обьявлять
его как ByRef . Это позволит избежать трудно находимых ошибок. Рекомендации
на сегодня : точно указывайте как вы передаете параметры ByVal или ByRef.
Это работает сейчас, будет работать и впредь.
VB.NET больше не поддерживает ключевое слово IsMissing . Сейчас оно работоспособно только с Variant типом. Вы можете подставлять значения по умолчанию для параметров, которые указаны, как Optional
В основном IsMissing использовался в старом VB4 коде, который не принимал других опшинал параметров кроме Вариант.
В VB.NET изменились правила обьявления переменных.
Это работало до сих пор . Больше корректно работать не будет .
В VB6 и ранее, переменная nFirstNumber принимала Varian тип. В VB.NET обе переменные станут Long. Наконец-то мы приближаемся к стандарту обьявлений переменных в других языках. Так что обьявляйте переменные по одной на строке и никаких ошибок не будет случаться.
Использование АPI в VB и так было , прямо скажем, весьма запутанно . Теперь у вас появится еще один повод писать функции одевающие API вызовы в привычные VB одежды Будут изменены некоторые типы данных. В данном случае, наиболее важны
изменения Integer и Long :
Изменения важны, так как API ожидает 32битные аргументы Сейчас это Long, но Long datatype в VB.NET будет иметь 64 bits, так что декларации придется менять. Есть реальная надежда, что Микрософт вынесет процесс конвертации типов Short - Intehger - long в отдельный инструмент, и процесс этот будет вполне автоматизирован.
VB.NET больше не поддреживает Currency datatype. Этот тип заменен на Decimal datatype (более предпочтительный в большинстве случаев ) 64 bit Long пока недоступен для использования, однако ничто не мешает начать пользоваться Decimal . Вы не можете обьявить переменную как Decimal напрямую, но никто не помешает вам обьявлять Variant и превратить ее в Десимал с помощью функции cDec . VB.NET будет иметь стандартный встроенный тип Decimal. Variant тоже прекращает существование. Будет специальный Object type для использования там, где сейчас используется Variant . Пытайтесь уже сейчас избегать Variant везде, где это возможно .
Концепция Web Services - это часть .NET . Использование протокола , названного Simple Object Access Protocol (SOAP) и базирующегося на XML позволит компонентам связываться через Web. По своей задумке SOAP использует HTTP и безразличен к стандартным firewall и т.д. К тому же, SOAP межплатформенный протокол, что позволяет связывать разные системы. Сервисы , основынные на SOAP дожлны заменить собой существующие Remote Procedure Call (RPC) В том чисте и Distributed COM (DCOM) станет менее заметен для использования в сетях Уже сейчас это можно пробовать и набираться опыта. Microsoft раздает
свой SOAP тулкит для VS6 , есть там библиотека и для VB. Кстати
, свежая версия выложена вчера.
Из за изменений в WinForms и Web Forms, масса сегодняшних VB приложений плохие кандадаты на миграцию под .Net Это происходит из за того, что бизнес логика в этих приложениях сильно перемешана с логикой работы интрефейса пользователя. Как мне видится, конвертация классов под Vb.Net будет куда более простым делом, чем конвертация форм. Так что долой всю бизнес логику из форм. Пишите для этого классы и компоненты. Ну и в заключение - не так старшен черт, как его малюют. Будет новый весьма неплохой продукт, будем на нем работать!
20 ноября 2000 года.
|