Wednesday, May 19, 2010

Constructor in C# (For the Beginners)


Constructor
Constructor is a simple method inside a class. Except it has some exceptions:
Ø  Constructor has the same name as the class.
Ø  Constructor does not return value even void.
Ø  Constructor can be built with parameter or without parameter.
Ø  Every class has a default constructor Even if did not create it. If the developer does not create a constructor then the .NET compiler create a default constructor, this deafault constructor actually does nothing.
You can easily create a default constructor by creating a method like this :
class Point
    {
        public Point()
        {
          this.x = -1;
          this.y = -1;
        }
       private int x, y;     
}
Have a look on the example, there are two private variable x and y. So when an instance of the class point will be created the constructor will be fired and the variable x and y will get their value as -1 , -1 accordingly.

[ Here one thing is noticable, why I have used “this” keyword? I have told earlier that a constructor may be paremeterized or non-parameterized . if it is parameterized and I write it as
 class Point
    {
        public Point(int x , int y)// do not write as this
        {
          x = x;//what is the parameter and what is the feild
          y = y;// what is the parameter and what is the feild
        }
       private int x, y;     
}
Though the program will run but it is little ambiguous which one the parameter andwhich one is the field.
The “this” keyword indicates that – “this is a field”]


Now you can initialize your object by the constructor Point(). Like this way –
namespace ConAppCH7CCons
{
    class ConstructorExample
    {
        static void Main(string[] args)
        {
            Point origin = new Point();
            Console.ReadLine();
        }
    }
}
So, when the “origin” object is created it it is initialized with the value
x=-1
y=-1

Overriding a Constructor
Overriding is a feture of OOP and an example of Polymorphism. Constructor overloading is very simple as method overloading. You can have different version of constructors and they can vary by the number of parameter and type of parameter.

From the preeciding example , let uss, you do not want to initialize your x and y value with different values and in the mean time you want to keep an option that the user can run the program without any value. In this situation you can code like this :

namespace ConAppCH7CCons
{
    class Point
    {
        public Point()
        {
            this.x = -1;
            this.y = -1;
            Console.WriteLine("Deafult Constructor Called");
        }

        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
            Console.WriteLine("x = {0} , y = {1}", x, y);
        }
  private int x, y;
  }
   }

Now you have two different versions of constructor. You can create objects like bellow :

namespace ConAppCH7CCons
{
    class ConstructorExample
    {
        static void Main(string[] args)
        {
            Point origin = new Point();
            Point bottomRight = new Point(1024, 1280);
            Console.ReadLine();
        }
    }
}
So when when the object “origin” is initiated then
x=-1
y=-1

and  when the object “bottomRight” is initiated then
x=1024
y=1280

Example
Here I will show an example related on constructor. This example is for calculate the distance between two given points-
Point.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace ConAppCH7CCons
{
    class Point
    {
        public Point()
        {
            this.x = -1;
            this.y = -1;
            Console.WriteLine("Deafult Constructor Called");
        }

        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
            Console.WriteLine("x = {0} , y = {1}", x, y);
        }

        public double DistanceTo(Point other)
        {
            int xDiff = this.x - other.x;
            int yDiff = this.y - other.y;
            return Math.Sqrt((xDiff * xDiff) + (yDiff * yDiff));
        }

        private int x, y;
    }
}


ConstructorExample.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace ConAppCH7CCons
{
    class ConstructorExample
    {
        static void Main(string[] args)
        {
            Point origin = new Point();
            Point bottomRight = new Point(1024, 1280);
            double distance = origin.DistanceTo(bottomRight);
            Console.WriteLine("distance = {0}",distance);
            Console.ReadLine();
        }
    }
}

No comments:

Post a Comment