In the previous lessons, we saw that fields – whether accessed directly or behind properties – are a collection of values that come to represent the current state description of the object they belong to. It’s generally a good idea to put a new object into a valid state as soon as possible before you start using it preferably at the time of instantiation. This would mean that you would want to construct the values for those fields – that represent that state – somewhere on the line of code where the new keyword is used. Luckily, there is a special
type of method that allows you do to this called a “Constructor”.
Step 1: Create a New Project
For this lesson, create a new ASP.NET project called “CS-ASP_043” with a single resultLabel Server Control:
Without realizing it, you have been using Constructors all along. Whenever you create a new object, you are invoking a default, empty
constructor by using the empty parentheses:
Step 2: Understanding the Default Empty Constructor
You may wonder how this is possible if you didn’t even write this method within the object’s class. The answer is that it is created in the background regardless. If you could see it, it would look like this:
Step 3: Understanding Constructor Requirements
The constructor is different from ordinary methods in three key ways. The constructor must:
Have the same name as the class it belongs to.
Be called at instantiation, after the new keyword.
Not have a return type.
You can take control of exactly what the constructor does by explicitly writing its implementation details:
Step 4: Using Constructor Input Parameters for Initialization
Now, whenever a new Car object is created, it will take on these initialized values and retain them unless they are over-written. Better yet, you can let the values become initialized to whatever is supplied via the constructor’s input parameters:
Step 5: Using the ‘this’ Keyword
The “this” keyword simply refers to the class-level properties of the particular object’s instance and is necessary only when the constructor’s input parameters are named the exact same way. Now, you can initialize these values to whatever you want at the point of instantiation:
Add this public method to the Car class so that we can output the object’s values via the resultLabel:
Then call the method in the Default class, which returns the formatted string. And then see the output when running the application:
Step 6: Overloading the Constructor
Since a constructor is just like any other kind of method, you can overload it with several definitions. Here, we can add to option for an initialized object – yet not specifically defined – in the case of no input parameters given at instantiation:
To get the code-snippet shortcut for a constructor, type "ctor" and hit the tab key twice.
Step 7: Using Intellisense to Cycle Through Overloaded Constructors
Now, if we choose to instantiate a Car without any specific values given as input parameters, we still have a Car object that is in a valid, though not specifically defined, state:
And when you run the application you will, at least, have some kind of data shown:
Recall that many of the predefined objects we have been working with, such as DateTime(), have a variety of overloaded constructors that can put the object into a valid state. Go through the various constructors for DateTime() available to you, and try to imagine what the constructors look like behind these twelve overload options: