Constructors in C#

Constructors have a very special meaning to the compiler and CLR but sometimes its flow seems difficult for a developer. This article's explanation is simple but provides important insights into Constructors.

What is a Constructor?

 
A Constructor is a special method in a class/struct with the same name as the class/struct without any return type that initializes fields and members of a class/struct.
 
A constructor can only be called by,
  • The Compiler using the New keyword to initialize a class/struct. 
  • Another constructor of the same class/struct using the this keyword.
  • Constructors of the derived class using the base() keyword.

Types of Constructors in C#

The following are the types of Constructors in C#,

  • Default constructor.
  • Parameterized Constructor.
  • Instance Constructor.
  • Static Constructor.
  • Private Constructor.
Default Constructors

The following describes Default Constructors,

  • A Constructor with no parameter is called a Default Constructor.
  • A Default Constructor is called by the compiler when no arguments are passed to the New operator while creating an object of a class or struct.
  • If there is no constructor in a non-static class then a Public Default Constructor is provided by the compiler so that a class can be instantiated.
  • A struct cannot have an explicit Default Constructor (we cannot define an explicit Default Constructor in a struct), but it is always provided by the compiler to initialize each field of the struct to its default value.

Parameterized Constructors

The following describes Parameterized Constructors,

  • A constructor with parameters is called a parameterized Constructor.
  • A class or struct can have multiple parameterized constructors as long as they have a different method signature. They follow the same concept as method overloading.
  • The compiler provides Default Constructors only if there is no constructor (default or parameterized) defined in a class.
  • Parameterized Constructors can exist even without the existence of Default Constructors.

Static Constructors

The following describes Static Constructors,

  • To initialize a Static Class or static variables in a 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 Constructor per class
  • Static Constructors cannot have an explicit "this" or "base" constructor call, in other words Static Constructors cannot be called directly
  • Static Constructors are called automatically before the first instance of a class is created or any static member is referenced
  • Static Constructors are called only once in the lifetime of a class

Private Constructors

The following describes Private Constructors,

  • A constructor becomes a private constructor when we declare it with the private access specifier.
  • Private Constructors can neither be instantiated nor inherited from another class.
  • An object of a class can only be created in the class itself.
  • Microsoft recommends its use for the implementation of the Singleton Pattern.

Constructor Chaining

The following describes Constructor Chaining,

  • A constructor can call another constructor of the same class or of the base class
  • Since one constructor can invoke another, this sometimes can cause the execution of multiple constructors; that is referred to as Constructor Chaining
  • If a class is not derived from any other class then the following would be the chain,

    • Static Constructor.
    • Instance Constructor

  • If a class is derived from any other class then the following would be the chain:
  • Derived Static Constructor.
  • Base Static Constructor.
  • Base Instance Constructor.
  • Derived Instance Constructor.

I hope all topics related to constructors have been covered. Please let me know if I have missed any or you need more explanations or examples.

!! Happy Programming !!