Understanding Types of Constructors in C# with Simple Examples

👋 Introduction: Why Do We Need Constructors?

Hey there, future C# expert! Ever wondered why objects need constructors? Let’s say you’re creating a car racing game. Every new car should have a default speed and fuel level, right? Imagine setting these values manually for every new car—ugh, what a pain! 😫

That’s where constructors come to the rescue! They automatically initialize objects, saving you time and preventing errors. In this guide, we’ll break down different types of constructors in C# with real-world examples and simple code explanations. So, let’s dive in! 🚀

🔥 What is a Constructor in C#?

A constructor is a special method that runs automatically when an object is created. It has the same name as the class and doesn’t have a return type.

💡 Why are constructors important?

✔️ They initialize object properties automatically
✔️ They prevent errors by setting default values
✔️ They make code shorter, cleaner, and easier to manage

🏗️ Types of Constructors in C#

In C#, a constructor is a special method used to initialize objects when they are created. There are different types of constructors in C#, each serving a unique purpose. These constructors help in setting default values, passing parameters, copying objects, and handling static data efficiently. Here’s a list of the main types of constructors:

1️⃣ Default Constructor – Initializes an object with predefined values.
2️⃣ Parameterized Constructor – Accepts arguments to assign custom values.
3️⃣ Copy Constructor – Creates a new object by copying another object.
4️⃣ Static Constructor – Runs only once to initialize static data.
5️⃣ Private Constructor – Restricts object creation outside the class.

Each constructor type plays a crucial role in object-oriented programming, making object initialization smooth and efficient! 🚀

1️⃣ Default Constructor (No Parameters)

A default constructor is the simplest type. It has no parameters and assigns default values to object properties.

Example:
				
					using System;

class Car
{
    public string Brand;

    // Default Constructor
    public Car()
    {
        Brand = "Toyota";
        Console.WriteLine("A new car has been created!");
    }
}

class Program
{
    static void Main()
    {
        Car myCar = new Car();  // Constructor is called automatically
        Console.WriteLine($"Car Brand: {myCar.Brand}");
    }
}
				
			
Output:
				
					A new car has been created!  
Car Brand: Toyota  
				
			

🛠️ Code Explanation:

  • The constructor Car() is called automatically when new Car() is used.
  • It sets the Brand property to "Toyota".
  • We don’t need to manually assign a brand—it’s done inside the constructor!

2️⃣ Parameterized Constructor (With Parameters)

A parameterized constructor lets you pass values while creating an object.

Example:
				
					class Laptop
{
    public string Model;

    // Parameterized Constructor
    public Laptop(string modelName)
    {
        Model = modelName;
    }
}

class Program
{
    static void Main()
    {
        Laptop myLaptop = new Laptop("Dell XPS"); // Passing "Dell XPS"
        Console.WriteLine($"Laptop Model: {myLaptop.Model}");
    }
}
				
			
Output:
				
					Laptop Model: Dell XPS  
				
			

🛠️ Code Explanation:

  • The constructor Laptop(string modelName) takes a parameter.
  • When we create myLaptop, "Dell XPS" is passed to the constructor and stored in Model.
  • Now, different objects can have different values!

3️⃣ Copy Constructor (Cloning an Object)

A copy constructor creates a duplicate of an existing object.

Example:
				
					class Book
{
    public string Title;

    // Normal Constructor
    public Book(string title)
    {
        Title = title;
    }

    // Copy Constructor
    public Book(Book oldBook)
    {
        Title = oldBook.Title;
    }
}

class Program
{
    static void Main()
    {
        Book book1 = new Book("C# Mastery");
        Book book2 = new Book(book1);  // Cloning book1

        Console.WriteLine($"Book 1: {book1.Title}");
        Console.WriteLine($"Book 2: {book2.Title}");
    }
}
				
			
Output:
				
					Book 1: C# Mastery  
Book 2: C# Mastery  
				
			

🛠️ Code Explanation:

  • Book book2 = new Book(book1); copies the title from book1 to book2.
  • Both objects now have the same title, without re-entering the value!

4️⃣ Static Constructor (Runs Only Once)

A static constructor runs only once, when the class is accessed for the first time.

Example:
				
					class Database
{
    static Database()
    {
        Console.WriteLine("Database Connection Established!");
    }
}

class Program
{
    static void Main()
    {
        Database d1 = new Database();
        Database d2 = new Database();
    }
}
				
			
Output:
				
					Database Connection Established!  
				
			

(Even though we created two objects, the constructor ran only once!)

🛠️ Code Explanation:

  • A static constructor is declared using static.
  • It is called automatically when the class is accessed for the first time.

5️⃣ Private Constructor (Preventing Object Creation)

A private constructor is a constructor that cannot be accessed outside its own class. This means you cannot create objects using new ClassName() from another class.

Example:

Let’s say we have a Logger class that writes logs to a file. We don’t want multiple instances of this class because logging should be handled by a single object.

				
					using System;

class Logger
{
    private static Logger instance;

    // Private Constructor - Cannot be accessed outside this class
    private Logger()
    {
        Console.WriteLine("Logger Initialized!");
    }

    // Public Method to Get the Single Instance
    public static Logger GetInstance()
    {
        if (instance == null)
        {
            instance = new Logger();
        }
        return instance;
    }

    public void LogMessage(string message)
    {
        Console.WriteLine($"Log: {message}");
    }
}

class Program
{
    static void Main()
    {
        // Logger logger1 = new Logger(); ❌ This will cause an error!

        Logger logger1 = Logger.GetInstance();
        Logger logger2 = Logger.GetInstance();

        logger1.LogMessage("Application started.");
        logger2.LogMessage("User logged in.");

        Console.WriteLine(ReferenceEquals(logger1, logger2)); // Should print True
    }
}
				
			
Output:
				
					Logger Initialized!  
Log: Application started.  
Log: User logged in.  
True  
				
			

🛠️ Code Explanation:

1️⃣ Private Constructor (private Logger())

  • Prevents direct object creation (new Logger()) from outside the class.

2️⃣ Static Instance (private static Logger instance;)

  • Stores the only allowed instance of the class.

3️⃣ Public Method (GetInstance())

  • Checks if an instance already exists. If not, it creates one.
  • Ensures only one object is ever created.

4️⃣ Using the Singleton (Logger.GetInstance())

  • logger1 and logger2 refer to the same instance.
  • This is why ReferenceEquals(logger1, logger2) prints True.

🏦 Real-World Example: Creating a Bank Account

Let’s say we want to open a bank account with an initial deposit. A constructor can handle this for us!

Example:
				
					class BankAccount
{
    public string AccountHolder;
    public double Balance;

    // Constructor
    public BankAccount(string name, double initialBalance)
    {
        AccountHolder = name;
        Balance = initialBalance;
    }

    public void ShowDetails()
    {
        Console.WriteLine($"Account Holder: {AccountHolder}");
        Console.WriteLine($"Balance: ${Balance}");
    }
}

class Program
{
    static void Main()
    {
        BankAccount account1 = new BankAccount("Alice", 500.00);
        account1.ShowDetails();
    }
}
				
			
Output:
				
					Account Holder: Alice  
Balance: $500.00  
				
			

🛠️ Code Explanation:

  • The constructor takes two parameters: name and initialBalance.
  • When account1 is created, it automatically sets AccountHolder and Balance.
  • No need to manually assign values—the constructor does the work!

🎯 Conclusion: Why Are Constructors Important?

🚀 Constructors save time and reduce errors by automatically initializing objects.

 

Key Takeaways:

✔️ Default Constructor assigns fixed values
✔️ Parameterized Constructor allows custom values
✔️ Copy Constructor duplicates an object
✔️ Static Constructor runs only once

 

🔜 Next What?

In the next chapter, you’ll learn about constructor overloading in C#—using multiple constructors in one class. It’s gonna be fun! 🎉

Leave a Comment

Share this Doc

Types of Constructors

Or copy link