Constructors have a very special meaning to Compiler and CLR but some times its meaning and flow seems difficult for a developer. Today I will explain simple but important insights of Constructor.
So, What is a Constructor?
A Constructor is a special method in a class/struct with the same name as of class/struct without any return type, used to initialized fields and members of a class/struct;
A constructor can only be called by:
- Compiler using New keyword to initialize a class/struct.
- Another constructor of same class/struct using :this() keyword.
- Constructors of derived class using :base() keyword.
Types of Constructor?
- Default constructor.
- Parameterized Constructor.
- Instance Constructor.
- Static Constructor.
- Private Constructor.
- Copy Constructor.
Default Constructor?
- A Constructor with no parameter is called Default Constructor.
- Default Constructor is called by compiler when no arguments are passed to New operator while creating a object of class or Struct.
- If there is no constructor in a Non-Static class, a Public Default Constructor is provided by compiler so that a class can be instantiated.
- A Struct cannot have an explicit Default Constructor(We can not define an explicit Default Constructor in a struct), but it is always provided by compiler to initialize each field of struct to its default value.
Parameterized Constructor?
- A constructor with parameters are called parameterized Constructor.
- A Class or Struct can have multiple parameterized constructors as long as they have different method signature. They follow same concept of method overloading.
- Compiler provides Default Constructors only if there is no constructor(Default or Parameterized) defined in a class.
- Parameterized Constructors can exists even without the existence of Default Constructors.
Static Constructor?
- To initialize a Static Class or Static variables in Non-Static Class, Static Constructors are used;
- Access Modifiers are not allowed on Static Constructors;
- Static Constructors cannot be parameterized;
- There can be only one Static Constructors per class;
- Static Constructors cannot have an explicit 'this' or 'base' constructor call. i.e Static Constructors cannot be called directly;
- Static Constructors are called automatically before first instance of a class is created or any static member is referenced;
- Static Constructors are called called only once in lifetime of a class;
Private Constructor?
- A constructors becomes private constructor when we declare with private access specifier.
- Private Constructors can neither be instantiated nor inherited from other class.
- Object of class can only be created in the class itself.
- Microsoft recommends its uses to implement Singleton Pattern.
Copy Constructor?
A parameterized constructor that contains a parameter of same class type is called as copy constructor. It can be used to initialize a new class from an existing class of same type.Constructor Chaining?
- A constructor can make call to another constructor of same class or of base class;
- Since one constructor can invoke other, this sometimes can cause execution of multiple constructors and referred to as Constructor chaining;
- If class is not derived from any other class, below would be the chain:
- Static Initializer.
- Static Constructor.
- Instance Initializer.
- Instance Constructor
- If a class is derived from any other class, below would be the chain:
- Derived Static Initializer.
- Derived Static Constructor.
- Derived Instance Initializer.
- Base Static Initializer.
- Base Static Constructor.
- Base Instance Initializer.
- Base Instance Constructor.
- Derived Instance Constructor.
I hope i have covered all topics related to constructor. Please let me know if i have missed any or you need more explanation or examples.
!! Happy Programming !!