How constructor chaining works in C Sharp (C#) - Performance & Efficiency
Start learning this pattern below
Jump into concepts and practice - no test required
Constructor chaining lets one constructor call another in the same class to reuse code.
We want to see how the time to create an object grows as constructors call each other.
Analyze the time complexity of this constructor chaining example.
public class Box
{
public int Width, Height, Depth;
public Box() : this(1, 1, 1) { }
public Box(int size) : this(size, size, size) { }
public Box(int width, int height, int depth)
{
Width = width;
Height = height;
Depth = depth;
}
}
This code shows three constructors where simpler ones call the more detailed one.
Look for repeated calls or loops inside constructors.
- Primary operation: Calling another constructor using
this(...). - How many times: Exactly once per object creation, no loops or recursion.
The number of constructor calls stays the same regardless of input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 3 (calls and assignments) |
| 100 | 3 (calls and assignments) |
| 1000 | 3 (calls and assignments) |
Pattern observation: The work does not increase with input size; it stays constant.
Time Complexity: O(1)
This means creating an object with constructor chaining takes a fixed amount of time, no matter the input size.
[X] Wrong: "Constructor chaining makes object creation slower as input grows because of multiple calls."
[OK] Correct: The number of constructor calls is fixed and does not depend on input size, so time stays constant.
Understanding constructor chaining helps you write cleaner code and shows you know how object creation works under the hood.
"What if one constructor called another in a loop? How would the time complexity change?"
Practice
Solution
Step 1: Understand constructor chaining concept
Constructor chaining means one constructor calls another constructor within the same class to reuse code.Step 2: Identify what constructor chaining does
It helps avoid repeating initialization code by calling another constructor using: this(...)syntax.Final Answer:
Call one constructor from another constructor in the same class -> Option DQuick Check:
Constructor chaining = calling another constructor [OK]
- Confusing constructor chaining with method calls
- Thinking it creates multiple objects
- Mixing it up with inheritance or overriding
Solution
Step 1: Recall constructor chaining syntax
Constructor chaining uses: this(parameters)after the constructor signature to call another constructor in the same class.Step 2: Analyze options
public MyClass() : this(5) { } uses: this(5)which correctly calls another constructor with an int parameter. public MyClass() : this() { } calls itself recursively causing error. public MyClass() : base() { } calls base class constructor, not chaining. public MyClass() { this(); } tries to call constructor inside body, which is invalid.Final Answer:
public MyClass() : this(5) { } -> Option CQuick Check:
Constructor chaining syntax =: this(...)[OK]
- Using 'this()' inside constructor body instead of after signature
- Confusing base() with this()
- Calling the same constructor recursively
class Test {
public Test() : this(10) {
Console.WriteLine("Default constructor");
}
public Test(int x) {
Console.WriteLine($"Constructor with {x}");
}
}
class Program {
static void Main() {
Test t = new Test();
}
}Solution
Step 1: Understand constructor chaining call order
The parameterless constructor callsthis(10), so the constructor with int parameter runs first.Step 2: Trace output order
First, "Constructor with 10" is printed from the int constructor. Then control returns to parameterless constructor which prints "Default constructor".Final Answer:
Constructor with 10 Default constructor -> Option AQuick Check:
Chained constructor runs first, then caller prints [OK]
- Assuming calling constructor runs first
- Ignoring constructor chaining order
- Mixing output order
class Sample {
public Sample() : this() {
Console.WriteLine("Hello");
}
}Solution
Step 1: Analyze constructor chaining call
The constructor calls itself with: this(), causing infinite recursion.Step 2: Identify error type
This recursive call leads to a runtime stack overflow error because no termination occurs.Final Answer:
Recursive constructor call causing infinite loop -> Option BQuick Check:
Constructor calling itself = infinite recursion [OK]
- Thinking chaining to self is allowed
- Confusing base() and this() calls
- Expecting constructor to have return type
new Box()?class Box {
public int Width, Height;
public Box() : this(5, 10) {
Console.WriteLine("Default Box");
}
public Box(int w, int h) {
Width = w;
Height = h;
Console.WriteLine($"Box: {Width}x{Height}");
}
}Solution
Step 1: Understand constructor chaining and initialization
The parameterless constructor callsthis(5, 10), so the two-parameter constructor runs first, setting Width and Height and printing their values.Step 2: Trace output order
First, "Box: 5x10" is printed from the two-parameter constructor. Then control returns to the parameterless constructor which prints "Default Box".Final Answer:
Box: 5x10 Default Box -> Option AQuick Check:
Chained constructor runs first, then caller prints [OK]
- Assuming default values 0 for Width and Height
- Thinking default constructor runs first
- Ignoring chaining call order
