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

C#-তে প্রমাণ করা যায় স্ট্যাটিক ক্লাসের শুধু একটি ইনস্ট্যান্স তৈরি হয়

C#-তে স্ট্যাটিক ক্লাস ইনস্ট্যান্সিয়েট করা যায় না — এর কোনো কনস্ট্রাক্টর নেই, এবং `new` দিয়ে অবজেক্ট বানানো যায় না। কিন্তু এটির স্ট্যাটিক মেম্বারগুলো ক্লাস লোড হলে একবারই ইনিশিয়ালাইজ হয়। নিচের উদাহরণে দেখানো হয়েছে কীভাবে স্ট্যাটিক কনস্ট্রাক্টর একবারই কল হয়।

উদাহরণ: স্ট্যাটিক কনস্ট্রাক্টর একবার কল হয়

using System;

static class Demo {
    public static int Count;
    
    static Demo() {
        Console.WriteLine("Static Constructor called");
    }
}

class Program {
    static void Main() {
        Demo.Count++;
        Demo.Count++;
        Console.WriteLine(Demo.Count); // Output: 2
        
        Console.ReadKey();
    }
}

আউটপুট:

Static Constructor called
2

ব্যাখ্যা

  • Demo.Count++ দুবার কল হলেও, স্ট্যাটিক কনস্ট্রাক্টর শুধু একবারই রান হল
  • এটি প্রমাণ করে যে ক্লাস লোড হওয়ার সময় একবারই ইনিশিয়ালাইজ হয়
  • স্ট্যাটিক ফিল্ড Count গ্লোবাল ভেরিয়েবলের মতো কাজ করে — সব কল একই মেমরি লোকেশন শেয়ার করে

স্ট্যাটিক ক্লাসের নিয়মাবলী

বিষয়নियम
ইনস্ট্যান্সিয়েশনসম্ভব না (new StaticClass() এরর)
ইনহেরিট্যান্সসম্ভব না (sealed ইম্প্লিসিট)
ইন্টারফেস ইমপ্লিমেন্টসম্ভব না
ইনস্ট্যান্স মেম্বাররखা যায় না (সব static হতে হবে)
কনস্ট্রাক্টরশুধু static constructor (প্যারামিটারহীন)
অ্যাক্সেসClassName.MemberName দিয়ে সরাসরি

স্ট্যাটিক ক্লাস vs সিঙ্গলটন প্যাটার্ন

// Static Class - সিঙ্গলটন নয়, শুধু স্ট্যাটিক মেম্বার ধারক
static class MathUtils {
    public static int Add(int a, int b) => a + b;
}

// Singleton Pattern - একটি ইনস্ট্যান্স নিশ্চিত করে
class Singleton {
    private static Singleton _instance;
    private static readonly object _lock = new();
    
    private Singleton() { }
    
    public static Singleton Instance {
        get {
            if (_instance == null) {
                lock (_lock) {
                    _instance ??= new Singleton();
                }
            }
            return _instance;
        }
    }
}

মনোযোগ দিন

স্ট্যাটিক ক্লাসে "ইনস্ট্যান্স" নেই — শুধু স্ট্যাটিক মেম্বার রয়েছে। উপরের উদাহরণে Count ভেরিয়েবলটি ক্লাস-লেভেলে একবার alokated হয় এবং প্রোগ্রামের লাইফসাইকেল পর্যন্ত থাকে। এটি "একটি ইনস্ট্যান্স" নয়, বরং শেয়ার্ড স্টেট।

  1. জাভাস্ক্রিপ্টে একটি কী বাদ দিয়ে অবজেক্ট ক্লোন করা

  2. জাভাস্ক্রিপ্টে কোনো অবজেক্ট ক্লাসের ইনস্ট্যান্স কিনা যাচাই করা

  3. C#-এ নতুন অবজেক্ট কীভাবে তৈরি করবেন?

  4. পাইথনে ইনস্ট্যান্সের ক্লাস নাম কীভাবে পাবেন?