readonly কিওয়ার্ড একটি মেম্বার ভেরিয়েবলকে কনস্ট্যান্ট ডিক্লেয়ার করতে ব্যবহৃত হয়, কিন্তু এর ভ্যালু রানটাইমে ক্যালকুলেট করা যেতে পারে। এটি const মডিফায়ার থেকে আলাদা, যেটি কম্পাইল টাইমেই ভ্যালু সেট করতে হয়। readonly ব্যবহার করে ফিল্ডের ভ্যালু বা ডিক্লেয়ারেশনে বা কনস্ট্রাক্টরে সেট করা যায়।
readonly মডিফায়ার চারটি কনটেক্সটে ব্যবহার করা যায়:
- ফিল্ড ডিক্লেয়ারেশন
- Readonly struct ডিক্লেয়ারেশন
- Readonly মেম্বার ডেফিনিশন
- Ref readonly মেথড রিটার্ন
ফিল্ড ডিক্লেয়ারেশন কনটেক্সটে, অ্যাসাইনমেন্ট শুধু ডিক্লেয়ারেশনের সময় বা একই ক্লাসের কনস্ট্রাক্টর আহ্বান হলে হয়।
উদাহরণ ১: readonly ফিল্ড
class Program
{
readonly string Name;
public Program() { Name = "Name"; }
static void Main(string[] args)
{
Program a = new Program();
System.Console.WriteLine(a.Name);
Console.ReadLine();
}
}
আউটপুট
Name
Readonly Struct (C# 7.2+)
public readonly struct Server
{
public readonly string Name;
public Server(string name) { Name = name; }
}
class Program
{
static void Main(string[] args)
{
Server a = new Server("Domain Controller");
System.Console.WriteLine(a.Name);
Console.ReadLine();
}
}
আউটপুট
Domain Controller
সুবিধা: ইমিউটেবিলিটি নিশ্চিত করে, থ্রেড সেফটি বাড়ায়, কম্পাইলার অপ্টিমাইজেশন সক্ষম করে, এবং ডিজাইন ইন্টেন্ট স্পষ্ট করে (এই ফিল্ড কনস্ট্রাকশনের পর পরিবর্তন হবে না)।