OrderedDictionary ক্লাসের AsReadOnly() মেথড ডিকশনারির একটি শুধুমাত্র পঠনযোগ্য (read-only) র্যাপার রিটার্ন করে। এই র্যাপারের মাধ্যমে মূল ডিকশনারি মডিফাই করা যায় না (Add, Remove, Clear, সেটার ব্লকড), কিন্তু মূল ডিকশনারি পরিবর্তন হলে র্যাপারে প্রতিফলিত হয়।
উদাহরণ ১: দুটি OrderedDictionary এবং AsReadOnly()
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
OrderedDictionary dict1 = new OrderedDictionary();
dict1.Add("A", "বই");
dict1.Add("B", "ইলেকট্রনিক্স");
dict1.Add("C", "স্মার্ট ওয়েয়ারেবল");
dict1.Add("D", "পেট সাপ্লাই");
dict1.Add("E", "পোশাক");
dict1.Add("F", "ফুটওয়েয়ার");
Console.WriteLine("OrderedDictionary1 উপাদানসমূহ...");
foreach (DictionaryEntry d in dict1) {
Console.WriteLine(d.Key + " " + d.Value);
}
OrderedDictionary dict2 = new OrderedDictionary();
dict2.Add("1", "এক");
dict2.Add("2", "দুই");
dict2.Add("3", "তিন");
dict2.Add("4", "চার");
dict2.Add("5", "পাঁচ");
dict2.Add("6", "ছয়");
Console.WriteLine("\nOrderedDictionary2 উপাদানসমূহ...");
foreach (DictionaryEntry d in dict2) {
Console.WriteLine(d.Key + " " + d.Value);
}
Console.WriteLine("\nOrderedDictionary1 == OrderedDictionary2? = " + dict1.Equals(dict2)); // False
// Read-only র্যাপার তৈরি
OrderedDictionary orderedDict = dict2.AsReadOnly();
Console.WriteLine("OrderedDictionary রিড-অনলি কিনা? = " + orderedDict.IsReadOnly); // True
// নিচের লাইন কম্পাইল টাইম এরর দেবে (রানটাইমে NotSupportedException):
// orderedDict.Add("7", "সাত");
// orderedDict.Remove("1");
// orderedDict.Clear();
}
}
আউটপুট
OrderedDictionary1 উপাদানসমূহ... A বই B ইলেকট্রনিক্স C স্মার্ট ওয়েয়ারেবল D পেট সাপ্লাই E পোশাক F ফুটওয়েয়ার OrderedDictionary2 উপাদানসমূহ... 1 এক 2 দুই 3 তিন 4 চার 5 পাঁচ 6 ছয় OrderedDictionary1 == OrderedDictionary2? = False OrderedDictionary রিড-অনলি কিনা? = True
উদাহরণ ২: সরাসরি AsReadOnly() ব্যবহার
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
OrderedDictionary dict = new OrderedDictionary();
dict.Add("A", "বই");
dict.Add("B", "ইলেকট্রনিক্স");
dict.Add("C", "স্মার্ট ওয়েয়ারেবল");
dict.Add("D", "পেট সাপ্লাই");
dict.Add("E", "পোশাক");
dict.Add("F", "ফুটওয়েয়ার");
Console.WriteLine("OrderedDictionary উপাদানসমূহ...");
foreach (DictionaryEntry d in dict) {
Console.WriteLine(d.Key + " " + d.Value);
}
OrderedDictionary orderedDict = dict.AsReadOnly();
Console.WriteLine("OrderedDictionary রিড-অনলি কিনা? = " + orderedDict.IsReadOnly); // True
}
}
আউটপুট
OrderedDictionary উপাদানসমূহ... A বই B ইলেকট্রনিক্স C স্মার্ট ওয়েয়ারেবল D পেট সাপ্লাই E পোশাক F ফুটওয়েয়ার OrderedDictionary রিড-অনলি কিনা? = True
AsReadOnly() - গুরুত্বপূর্ণ বৈশিষ্ট্য
- রিটার্ন টাইপ:
OrderedDictionary(সেইম টাইপ, কিন্তু IsReadOnly = true) - র্যাপার প্যাটার্ন: মূল ডিকশনারিকে র্যাপ করে, কপি তৈরি করে না।
- লাইভ ভিউ: মূল ডিকশনারি পরিবর্তন হলে র্যাপারে পরিবর্তন দেখা যায়।
- মডিফিকেশন ব্লকড: Add, Remove, Clear, Item setter কল করলে
NotSupportedExceptionনিক্ষেপ করে। - এনুমারেশন: foreach, Keys, Values, GetEnumerator() কাজ করে।
রিড-অনলি ডিকশনারি তৈরির অন্যান্য পদ্ধতি
// ১. ReadOnlyDictionary (জেনেরিক, সুপারিশকৃত)
using System.Collections.Generic;
using System.Collections.ObjectModel;
var dict = new Dictionary<string, string>();
dict.Add("A", "বই");
var readOnly = new ReadOnlyDictionary<string, string>(dict);
// ২. ImmutableDictionary (System.Collections.Immutable NuGet প্যাকেজ)
using System.Collections.Immutable;
var immutable = dict.ToImmutableDictionary(); // সম্পূর্ণ ইমিউটেবল, কপি তৈরি হয়
// ৩. IReadOnlyDictionary ইন্টারফেস (প্যারামিটার টাইপ হিসেবে)
void PrintDict(IReadOnlyDictionary<string, string> dict) { ... }
তুলনা: AsReadOnly() vs ReadOnlyDictionary vs ImmutableDictionary
| বৈশিষ্ট্য | OrderedDictionary.AsReadOnly() | ReadOnlyDictionary<TKey,TValue> | ImmutableDictionary<TKey,TValue> |
|---|---|---|---|
| টাইপ সেফটি | নন-জেনেরিক | জেনেরিক | জেনেরিক |
| মুল ডিকশনারি পরিবর্তন | র্যাপারে প্রতিফলিত হয় | র্যাপারে প্রতিফলিত হয় | নहीं (স্ন্যাপশট) |
| পারফরম্যান্স | ওভারহেড নেই | ওভারহেড নেই | কপি ওভারহেড |
| থ্রেড-সেফ | না (মুল ডিকশনারি থ্রেড-সেফ নয়) | না (মুল ডিকশনারি থ্রেড-সেফ নয়) | হ্যাঁ (ইমিউটেবল) |
সুপারিশ: নতুন কোডে Dictionary<TKey, TValue> + ReadOnlyDictionary<TKey, TValue> বা ImmutableDictionary<TKey, TValue> ব্যবহার করুন। OrderedDictionary লিগ্যাসি নন-জেনেরিক ক্লাস।