Home > Articles > Programming > Windows Programming

VB .NET Language Features

In this sample chapter, Dan Fox discusses the primary changes to the structure and functionality of the VB .NET language. Although the changes are not insignificant, VB developers will find the vast majority of the syntax is the same, and what has changed makes the language simpler and more powerful.
This sample chapter is excerpted from Building Distributed Applications with Visual Basic.NET, by Dan Fox.
This chapter is from the book

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."

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.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020