C#-এ কনস্ট্রাক্টর চেইনিংয়ের জন্য দুটি কীওয়ার্ড:
- this — একই ক্লাসের অন্য কনস্ট্রাক্টর কল করতে
- base — পেরেন্ট (বেস) ক্লাসের কনস্ট্রাক্টর কল করতে
this() — একই ক্লাসের কনস্ট্রাক্টর কল
class Demo {
// প্যারামিটারহীন কনস্ট্রাক্টর
public Demo() {
Console.WriteLine("Parameter less constructor called");
}
// ২ প্যারামিটার — this() দিয়ে ডিফল্ট কল
public Demo(int firstNumber, int secondNumber) : this() {
Console.WriteLine($"{firstNumber} {secondNumber}");
}
// ৩ প্যারামিটার — this() দিয়ে ২ প্যারামিটার वाला কল
public Demo(int firstNumber, int secondNumber, int thirdNumber)
: this(firstNumber, secondNumber) {
Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
}
}
class Program {
static void Main() {
Demo obj = new Demo(1, 2, 3);
Console.ReadLine();
}
}
আউটপুট:
Parameter less constructor called 1 2 1 2 3
base() — বেস ক্লাস কনস্ট্রাক্টর কল
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
নিয়মাবলী
| নিয়ম | বিবরণ |
|---|---|
| প্লেসমেন্ট | কনস্ট্রাক্টর ডিক্লেয়ারেশনের পর, বডির আগে : দিয়ে |
| একসাথে this/base | একই কনস্ট্রাক্টরে দুটোই একসাথে ব্যবহার করা যায় না |
| এক্সিকিউশন অর্ডার | base → this চেইন → বর্তমান কনস্ট্রাক্টর বডি |
| ডিফল্ট বেস | প্যারামিটারহীন বেস কনস্ট্রাক্টর থাকলে : base() অটোমেটিক |
ব্যবহারিক উদাহরণ: DRY (Don't Repeat Yourself)
public class Person {
public string Name { get; }
public int Age { get; }
public string Address { get; }
// মূল কনস্ট্রাক্টর (সব ফিল্ড ইনিশিয়ালাইজ)
public Person(string name, int age, string address) {
Name = name;
Age = age;
Address = address;
}
// কনভেনিয়েন্স কনস্ট্রাক্টর - this() দিয়ে মূলটাকে কল
public Person(string name, int age) : this(name, age, "Unknown") { }
public Person(string name) : this(name, 0, "Unknown") { }
public Person() : this("Unknown", 0, "Unknown") { }
}
সতর্কতা
- স্ট্রাক্ট (struct) এ ডিফল্ট কনস্ট্রাক্টর থাকে (সব ফিল্ড ০/null), কিন্তু eksplisitt parameterless কনস্ট্রাক্টর লিখা যায় না
- রিকার্সিভ
this()কল করলে স্ট্যাক ওভারফ্লো হবে