In Example 5-3, notice that the statement that creates the Time object looks as though it is invoking a method:
Dim timeObject As New Time( )
In fact, a method is invoked whenever you instantiate an object. This method is called a constructor. Each time you define a class you are free to define your own constructor, but if you don't, the compiler will provide one for you invisibly and automatically. The job of a constructor is to create the object specified by a class and to put it into a valid state. Before the constructor runs, the object is just a blob of memory; after the constructor completes, the memory holds a valid instance of the class.
The Time class of Example 5-3 does not define a constructor. As noted earlier, if you do not declare a constructor the compiler provides one for you. The constructor provided by the compiler creates the object but takes no other action.
If you do not explicitly initialize your member variables, they are initialized to default values (integers to 0, strings to the empty string, etc.). Table 5-2 lists the default values assigned to primitive types.
Type |
Default value |
---|---|
Numeric (Integer, Long, etc.) |
0 |
Boolean |
False |
Char |
'\0' (null) |
Enum |
0 |
Reference |
null |
Typically, you'll want to define your own constructor and provide it with arguments, so that the constructor can set the initial state for your object. In Example 5-3, you want to pass in the current year, month, date, and so forth, so that the object is created with meaningful data.
You declare a constructor like any other member method except:
The constructor is always named New.
Constructors are declared using the Sub keyword (which means there is no return value).
If there are arguments to be passed, you define an argument list just as you would for any other method. Example 5-5 declares a constructor for the Time class that accepts six integer arguments.
Option Strict On Imports System Public Class Time ' Private variables Private year As Integer Private month As Integer Private date As Integer Private hour As Integer Private minute As Integer Private second As Integer ' Public methods Public Sub DisplayCurrentTime( ) Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}", _ month, date, year, hour, minute, second) End Sub 'DisplayCurrentTime ' Constructor Public Sub New( _ ByVal theYear As Integer, _ ByVal theMonth As Integer, _ ByVal theDate As Integer, _ ByVal theHour As Integer, _ ByVal theMinute As Integer, _ ByVal theSecond As Integer) year = theYear month = theMonth date = theDate hour = theHour minute = theMinute second = theSecond End Sub End Class 'Time Module Module1 Sub Main( ) Dim timeObject As New Time(2005, 3, 25, 9, 35, 20) timeObject.DisplayCurrentTime( ) End Sub End Module Output: 3/25/2005 9:35:20
In this example, the constructor (Sub New) takes a series of integer values and initializes all the member variables based on these parameters. When the constructor finishes, the values have been initialized. When DisplayCurrentTime( ) is called in Main( ), the values are displayed.
Try commenting out one of the assignments and running the program again. You'll find that each member variable is initialized by the compiler to 0. Integer member variables are set to if you don't otherwise assign them. Remember that value types (e.g., integers) must be initialized; if you don't tell the constructor what to do, it will set default values.
Top |