C# 5.0 এবং আগে: কনস্ট্রাক্টরে ইনিশিয়ালাইজ
class Demo {
public Demo() {
FirstName = "DemoName"; // কনস্ট্রাক্টরে সেট
}
public string FirstName { get; set; }
}
class Program {
static void Main() {
Demo obj = new Demo();
Console.WriteLine(obj.FirstName); // DemoName
Console.ReadLine();
}
}
C# 6.0+ : প্রপার্টি ইনিশিয়ালাইজার (Auto-Property Initializer)
প্রপার্টি ডিক্লেয়ারেশনের সময়ই ডিফল্ট ভ্যালু দেওয়া যায় — ক্লিনার এবং পঠনযোগ্য।
class Demo {
// সরাসরি ডিফল্ট ভ্যালু অ্যাসাইন
public string FirstName { get; set; } = "DemoName";
// কমপ্লেক্স এক্সপ্রেশনও ব্যবহার করা যায়
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public List<string> Tags { get; set; } = new List<string>();
}
class Program {
static void Main() {
Demo obj = new Demo();
Console.WriteLine(obj.FirstName); // DemoName
Console.WriteLine(obj.CreatedAt); // বর্তমান UTC টাইম
Console.WriteLine(obj.Tags.Count); // 0
Console.ReadLine();
}
}
আউটপুট:
DemoName 2024-01-15 10:30:45 0
Read-Only অটো-প্রপার্টি (C# 6.0+)
public class User {
// শুধু getter, সেটার নেই — ইনমিউটেবল
public string Id { get; } = Guid.NewGuid().ToString();
public DateTime CreatedAt { get; } = DateTime.UtcNow;
// কনস্ট্রাক্টরে সেট করা যায় (শুধু একবার)
public string Name { get; }
public User(string name) {
Name = name;
}
}
init-only প্রপার্টি (C# 9.0+)
public class Person {
// অবজেক্ট ইনিশিয়ালাইজার সিনট্যাক্সে সেট করা যায়, পরে নয়
public string FirstName { get; init; }
public string LastName { get; init; }
}
var p = new Person { FirstName = "John", LastName = "Doe" };
// p.FirstName = "Jane"; // ❌ Compile error: init-only
required মডিফায়ার (C# 11.0+)
public class Product {
// অবশ্যই অবজেক্ট ইনিশিয়ালাইজারে প্রদান করতে হবে
public required string Name { get; set; }
public required decimal Price { get; set; }
}
var p = new Product { Name = "Laptop", Price = 999.99m }; // ✅
// var p2 = new Product(); // ❌ Compile error: required members missing
তুলনা সারসংক্ষেপ
| ভার্সন | ফিচার | সিনট্যাক্স | মিউটেবল? |
|---|---|---|---|
| ≤ C# 5.0 | কনস্ট্রাক্টর ইনিশিয়ালাইজ | Constructor body | হ্যাঁ |
| C# 6.0 | Auto-property initializer | Prop { get; set; } = val | হ্যাঁ |
| C# 6.0 | Read-only auto-prop | Prop { get; } = val | না (কনস্ট্রাক্টরে সেট) |
| C# 9.0 | init-only | Prop { get; init; } | শুধু অবজেক্ট ইনিশিয়ালাইজার |
| C# 11.0 | required | required Prop { get; set; } | হ্যাঁ (বাধ্যতামূলক ইনিশিয়ালাইজ) |