C#-এ কনস্ট্রাক্টর চেইনিংয়ের জন্য দুটি কীওয়ার্ড ব্যবহৃত হয়:
- this — একই ক্লাসের অন্য কনস্ট্রাক্টর কল করতে
- base — পেরেন্ট (বেস) ক্লাসের কনস্ট্রাক্টর কল করতে
সিনট্যাক্স
// বেস কনস্ট্রাক্টর কল
public ChildClass(parameters) : base(baseParameters) {
// চাইল্ড কনস্ট্রাক্টর বডি
}
উদাহরণ: বেস ক্লাস কনস্ট্রাক্টর কল
class DemoBase {
public DemoBase(int firstNumber, int secondNumber, int thirdNumber) {
Console.WriteLine("Base class Constructor");
Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Demo : DemoBase {
public Demo(int firstNumber, int secondNumber, int thirdNumber)
: base(firstNumber, secondNumber, thirdNumber) {
Console.WriteLine("Derived class Constructor");
Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Program {
static void Main() {
Demo obj = new Demo(1, 2, 3);
Console.ReadLine();
}
}
আউটপুট:
Base class Constructor 1 2 3 Derived class Constructor 1 2 3
নিয়ম ও ব্যবহারিক টিপস
- অর্ডার: বেস কনস্ট্রাক্টর প্রথমে রান হয়, তারপর ডেরাইভড কনস্ট্রাক্টর
- ডিফল্ট বেস কনস্ট্রাক্টর: যদি বেস ক্লাসে প্যারামিটারহীন কনস্ট্রাক্টর থাকে, তবে
: base()লিখতে হয় না (অটোমেটিক কল হয়) - প্যারামিটারহীন বেস কনস্ট্রাক্টর নাই: যদি বেস ক্লাসে শুধু প্যারামিটারযুক্ত কনস্ট্রাক্টর থাকে, তবে চাইল্ড ক্লাসে বাধ্যতামূলক
: base(...)কল করতে হবে - this() vs base(): একসাথে ব্যবহার করা যায় না (দুটোই কনস্ট্রাক্টর ইনিশিয়ালাইজারের অংশ)
উদাহরণ: this() এবং base() একসাথে (আলাদা কনস্ট্রাক্টরে)
class Base {
public Base(string name) { Name = name; }
public string Name { get; }
}
class Derived : Base {
public int Age { get; }
// কনস্ট্রাক্টর ১: base কল
public Derived(string name) : base(name) { }
// কনস্ট্রাক্টর ২: this কল (কনস্ট্রাক্টর ১-কে), যা base কল করবে
public Derived(string name, int age) : this(name) {
Age = age;
}
}
সাধারণ ভুল
// ❌ ভুল: বেস কনস্ট্রাক্টর বডির ভিতরে কল করা যায় না
class Child : Base {
public Child() {
base(); // Error: 'base' must be used in constructor initializer
}
}
// ✅ সঠিক: কনস্ট্রাক্টর ইনিশিয়ালাইজারে
class Child : Base {
public Child() : base() { }
}