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 হয় এবং প্রোগ্রামের লাইফসাইকেল পর্যন্ত থাকে। এটি "একটি ইনস্ট্যান্স" নয়, বরং শেয়ার্ড স্টেট।