কম্পিউটার টিউটোরিয়াল

C#-তে একই ক্লাসের অন্য কনস্ট্রাক্টর কল করা (Constructor Chaining)

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() কল করলে স্ট্যাক ওভারফ্লো হবে
  1. আইওএসে এক ভিউ কন্ট্রোলার থেকে অন্য ভিউ কন্ট্রোলারে নেভিগেট করার পদ্ধতি

  2. অ্যান্ড্রয়েডে ফ্র্যাগমেন্ট間 ডেটা পাস করার পদ্ধতি

  3. PHP – imagepalettecopy() ফাংশন ব্যবহার করে একটি ইমেজ থেকে অন্য ইমেজে প্যালেট কপি করুন

  4. জাভাতে invokeLater() মেথড কল করার পদ্ধতি