Home > Articles

0672321300

📄 Contents

  1. Chapter 3: VB .NET Language Features
  2. Functional Changes
  3. Upgrading from VB 6.0
  4. Summary
  • Print
  • + Share This
sams_sample_chap

Chapter 3: VB .NET Language Features

As is obvious by now, VB .NET and VS .NET contain significant changes from previous versions of VB in terms of the runtime architecture and the features of the development environment itself. In addition, the VB .NET language has been changed in accordance with the design goals to modernize and simplify the language, reduce programming errors, and provide full access to the Common Language Runtime (CLR) and Services Framework. Although some of these changes have produced much discussion in the VB community, my personal view is that this is good because it tightens the language and therefore makes it a better tool for development.

As a result of these changes, the language has actually been simplified in several respects by removing duplicate or confusing constructs, removing functionality now supported by the Services Framework, and taking away some of the idiosyncratic behavior particular to BASIC. In this chapter, we'll walk through the details of these changes as they related to both the structure of the language and the functional changes that might require you to think differently when coding in VB .NET. In addition, we'll explore the compatibility features that assist in transitioning code from VB 6.0 to VB .NET including using the Upgrade Wizard. However, it should be noted that some of the modernizing features that require more in-depth treatment, such as changes to classes, inheritance, explicit interface declaration, structured exception handling, and free threading, will be handled in Chapter 4, "Object-Oriented Features," Chapter 6, "Error Handling and Debugging," and Chapter 12, "Accessing System Services."

NOTE

All code listings and supplemental material for this chapter can be found on the book's Web site at www.samspublishing.com.

Keyword Changes

Unlike previous versions of VB, VB .NET runs within the context of the CLR and, as a result, must adhere to the rules of any Common Language Specification (CLS) compliant language. It shouldn't be surprising to learn that, as a result, the language itself is contained in an assembly with the namespace Microsoft.VisualBasic. When you choose to create a project in VS .NET with VB .NET, this assembly automatically is referenced, and its classes and methods can be referred to without using dot notation because they are declared with a special attribute making them global. This means that you don't have to be concerned with the class structure of the Microsoft.VisualBasic namespace, although the online documentation breaks it down for you. For the purposes of this chapter, we'll treat all the members of the classes contained in the Microsoft.VisualBasic namespace as peers and intrinsic keywords.

To begin, consider Table 3.1, which shows the keywords removed from VB .NET available in previous versions. Contrast this table with the keywords added to the language in Table 3.2.

Table 3.1  Obsolete Keywords, Functions, and Statements in VB .NET

Keyword, Function or Statement

Disposition

Array

Function formerly used to populate an array with arguments. Now the { } can be used in the declaration of the array.

As Any

Formerly used with the Declare statement. Now VB .NET supports overloading declares so that explicit data types must be used.

Atn, Sgn, Sqr

Replaced by the System.Math namespace.

Calendar

Replaced by the System.Globalization namespace.

Circle, Line

Replaced by the System.Drawing namespace.

Currency

Replaced by the Decimal data type.

Date

Still supported as a data type (mapping to System.DateTime) but is no longer a function returning a 4-byte date value. Use the Today property of the System.DateTime structure to return the day in the 8-byte CLR format.

Debug.Assert, Debug.Print

Replaced by methods in the System.Diagnostics namespace.

DefBool, DefInt, DefStr, and so on

Formerly used to specify data types for implicit declarations. No longer supported.

DoEvents

Replaced by a method in the System.WinForms.Application class.

Empty, Null, IsEmpty, IsNull

Formerly used for uninitialized variables and those that don't contain data. Now both conditions are handled by Nothing. Statements to check for these conditions also have been removed. Database nulls can be tested for using the IsDBNull function or against the System.DBNull.Value property.

Eqv, Imp

Bitwise operators replaced by the equals (=) operator and using Not and Or in conjunction (A Imp B) = ((Not A) Or B).

GoSub

Formerly used to branch to a line label and return later. No longer supported.

On..GoSub, On..Goto

Formerly used to conditionally branch to a line label. Should use Select Case or Switch instead.

IsMissing

Formerly used to determine whether a value was supplied for an Optional parameter. Now all optional parameters must have default values.

IsObject

Formerly used to determine whether a variable referenced an object. Replaced with IsReference.

Let, Set

Formerly, Set was used to indicate that an object reference was being assigned (Let was the default). Because default properties no longer are supported unless they accept parameters, these statements have been removed.

LSet, RSet

Replaced by PadRight and PadLeft methods of the System.String class, although still supported. However, LSet was also formerly used to copy user-defined types (UDTs). This use is no longer supported.

PSet, Scale

Formerly used to manipulate the color of a point and the coordinate system on forms and controls. No longer supported. Equivalent functionality exists in System.Drawing.

MsgBox

Still supported, but recommended use is the System.WinForms.MessageBox class.

Option Base

Formerly used to define the lower bound of arrays. Now all arrays are zero bound, so it is no longer supported.

Option Private Module

Formerly used to declare an entire module as private to the project. Now each module can be marked as private using the Private keyword.

Randomize, Rnd, Round

Replaced by the System.Random class and the Round method of the System.Math class. Rnd and Randomize still exist in the Microsoft.VisualBasic namespace, however.

String

Replaced by the overloaded constructor of the String class used for initialization.

String Functions

VB functions that returned strings by appending the $ have now been replaced by overloaded methods. Their counterparts that return Variants have been replaced with overloads that return Object.

Time

Replaced by the TimeOfDay property of the System.DateTime structure. Note that the Date data type is no longer represented as Double but rather as a DateTime structure.

Type

Replaced by the Structure statement.

VarType

Formerly used to determine the type of a Variant. Although it still exists, it should be replaced by the GetTypeCode method of the specific data types.

Variant

Formerly used to hold any type of data. Replaced with System.Object as the universal data type.

Wend

Formerly used in While...Wend loops. Now replaced with While...End While.

Table 3.2  New Keywords, Functions, and Statements in VB .NET

Class

Disposition

IsArray

Function used to determine whether an object is an array.

Choose

Function used to select and return a value from a list of arguments based on an index.

Short, CShort

New data type representing a 16-bit integer equivalent to Integer in VB 6.0. CShort converts from another data type to Short.

IsDBNull

Function that determines whether an expression evaluates to System.DBNull. Not the same as Nothing or a null string ("").

TimeOfDay

Statement that sets or returns the current system time.

GetException

Function that returns the Exception object used in the Err object. Provides a mapping from the Err object to exceptions.

Try...Catch...Finally, Throw

Statements used to perform structured exception handling.

GetType, CType, Convert

Function used to return the Type of the argument and System classes to convert to a different type.

Option Strict On|Off

Statement used to ensure type-safe code at compile time when turned on. Default in VS .NET is On.

^=, *=, /=, \=, +=, -=, &=

Operators used to perform the operation in the first part of the expression and assign the result to the variable.

AndAlso, OrElse

Logical operators used for short-circuit comparisons.

Delegate

Statement used to declare a delegate (covered in Chapter 4).

Imports

Statement that imports namespace names from referenced assemblies.

AddHandler, RemoveHandler

Dynamically adds and removes event handlers.

Inherits, Overloads, Overrides, NotInheritable, MustInherit, NotOverridable, Overridable

Keywords used with classes, as discussed in Chapter 4.

Interface

Statement used to define an interface, as discussed in Chapter 4.

Protected, Shadows, Shared, ReadOnly, WriteOnly

Access attributes for a class, method, or property, as discussed in Chapter 4.

MyBase

Object used to access the base class from within a class, as discussed in Chapter 4.

MyClass

Object used to access the current class.

Namespace

Used to define a boundary for classes.

Structure

Statement that replaces UDTs.

SyncLock..End SyncLock

Statements that ensure that a block of code is not executed concurrently by multiple threads. Discussed in Chapter 12.

IsReference

Function that determines whether the given variable is a valid reference to an object.

DirectCast

Function used to more strictly convert to a different type

You'll notice that in most instances for keywords removed from the language, an equivalent functionality exists in the Services Framework. In addition, many of the new keywords are related to the object-oriented features of VB .NET provided by the CLR. However, taken as a whole, you can see that the language has not become more complex through the addition of scores of keywords.

  • + Share This
  • 🔖 Save To Your Account

Related Resources

There are currently no related titles. Please check back later.