ListDictionary ক্লাসের IsSynchronized প্রোপার্টি ব্যবহার করে ডিকশনারি থ্রেড-সেফ (সিঙ্ক্রোনাইজড) কিনা তা জানা যায়। এই প্রোপার্টি সবসময় false রিটার্ন করে কারণ ListDictionary ডিফল্টভাবে থ্রেড-সেফ নয়।
উদাহরণ ১: ListDictionary-র সিঙ্ক্রোনাইজেশন ও অন্যান্য প্রোপার্টি যাচাই
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
ListDictionary dict = new ListDictionary();
dict.Add("1", "SUV");
dict.Add("2", "সেডান");
dict.Add("3", "ইউটিলিটি ভেহিকেল");
dict.Add("4", "কম্প্যাক্ট কার");
dict.Add("5", "SUV");
dict.Add("6", "সেডান");
dict.Add("7", "ইউটিলিটি ভেহিকেল");
dict.Add("8", "কম্প্যাক্ট কার");
dict.Add("9", "ক্রসওভার");
dict.Add("10", "ইলেকট্রিক কার");
Console.WriteLine("ListDictionary উপাদানসমূহ...");
foreach (DictionaryEntry d in dict) {
Console.WriteLine(d.Key + " " + d.Value);
}
Console.WriteLine("\nনির্দিষ্ট আকার কিনা? = " + dict.IsFixedSize);
Console.WriteLine("শুধুমাত্র পঠনযোগ্য কিনা? = " + dict.IsReadOnly);
Console.WriteLine("সিঙ্ক্রোনাইজড (থ্রেড-সেফ) কিনা? = " + dict.IsSynchronized);
Console.WriteLine("কী 'K' আছে কিনা? = " + dict.Contains("K"));
Console.WriteLine("কী '9' আছে কিনা? = " + dict.Contains("9"));
}
}
আউটপুট
ListDictionary উপাদানসমূহ... 1 SUV 2 সেডান 3 ইউটিলিটি ভেহিকেল 4 কম্প্যাক্ট কার 5 SUV 6 সেডান 7 ইউটিলিটি ভেহিকেল 8 কম্প্যাক্ট কার 9 ক্রসওভার 10 ইলেকট্রিক কার নির্দিষ্ট আকার কিনা? = False শুধুমাত্র পঠনযোগ্য কিনা? = False সিঙ্ক্রোনাইজড (থ্রেড-সেফ) কিনা? = False কী 'K' আছে কিনা? = False কী '9' আছে কিনা? = True
উদাহরণ ২: দুটি ListDictionary এবং সিঙ্ক্রোনাইজেশন চেক
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
ListDictionary dict1 = new ListDictionary();
dict1.Add("A", "বই");
dict1.Add("B", "ইলেকট্রনিক্স");
dict1.Add("C", "স্মার্ট ওয়েয়ারেবল");
dict1.Add("D", "পেট সাপ্লাই");
dict1.Add("E", "পোশাক");
dict1.Add("F", "ফুটওয়েয়ার");
Console.WriteLine("ListDictionary1 উপাদানসমূহ...");
foreach (DictionaryEntry d in dict1) {
Console.WriteLine(d.Key + " " + d.Value);
}
ListDictionary dict2 = new ListDictionary();
dict2.Add("1", "এক");
dict2.Add("2", "দুই");
dict2.Add("3", "তিন");
dict2.Add("4", "চার");
dict2.Add("5", "পাঁচ");
dict2.Add("6", "ছয়");
Console.WriteLine("\nListDictionary2 কী-ভ্যালু জোড়া...");
IDictionaryEnumerator demoEnum = dict2.GetEnumerator();
while (demoEnum.MoveNext()) {
Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
}
Console.WriteLine("নির্দিষ্ট আকার কিনা? = " + dict2.IsFixedSize);
Console.WriteLine("শুধুমাত্র পঠনযোগ্য কিনা? = " + dict2.IsReadOnly);
Console.WriteLine("সিঙ্ক্রোনাইজড (থ্রেড-সেফ) কিনা? = " + dict2.IsSynchronized);
Console.WriteLine("কী '5' আছে কিনা? = " + dict2.Contains("5"));
}
}
আউটপুট
ListDictionary1 উপাদানসমূহ... A বই B ইলেকট্রনিক্স C স্মার্ট ওয়েয়ারেবল D পেট সাপ্লাই E পোশাক F ফুটওয়েয়ার ListDictionary2 কী-ভ্যালু জোড়া... Key = 1, Value = এক Key = 2, Value = দুই Key = 3, Value = তিন Key = 4, Value = চার Key = 5, Value = পাঁচ Key = 6, Value = ছয় নির্দিষ্ট আকার কিনা? = False শুধুমাত্র পঠনযোগ্য কিনা? = False সিঙ্ক্রোনাইজড (থ্রেড-সেফ) কিনা? = False কী '5' আছে কিনা? = True
ListDictionary-র তিনটি মূল প্রোপার্টি
| প্রোপার্টি | রিটার্ন ভ্যালু | অর্থ |
|---|---|---|
IsFixedSize | false | আকার পরিবর্তন করা যায় (Add/Remove/Clear) |
IsReadOnly | false | লিখা/পড়া উভয় সম্ভব |
IsSynchronized | false | থ্রেড-সেফ নয় (এক্সটার্নাল লক দরকার) |
থ্রেড-সেফ्टी নিশ্চিত করার পদ্ধতি
// পদ্ধতি ১: lock স্টেটমেন্ট ব্যবহার (সুপারিশকৃত)
private readonly object _lock = new object();
private ListDictionary _dict = new ListDictionary();
public void SafeAdd(string key, object value) {
lock (_lock) {
_dict.Add(key, value);
}
}
public bool SafeContains(string key) {
lock (_lock) {
return _dict.Contains(key);
}
}
// পদ্ধতি ২: Synchronized wrapper (লিগ্যাসি, নন-জেনেরিক)
Hashtable syncDict = Hashtable.Synchronized(new Hashtable());
// ListDictionary-র জন্য সরাসরি Synchronized মেথড নেই
// পদ্ধতি ৩: আধুনিক - ConcurrentDictionary (সুপারিশকৃত)
using System.Collections.Concurrent;
var concurrentDict = new ConcurrentDictionary<string, string>();
concurrentDict.TryAdd("key", "value"); // থ্রেড-সেফ
সুপারিশ
ListDictionaryলিগ্যাসি নন-জেনেরিক ক্লাস।- নতুন কোডে
Dictionary<TKey, TValue>(সিঙ্গেল-থ্রেড) বাConcurrentDictionary<TKey, TValue>(মাল্টি-থ্রেড) ব্যবহার করুন। IsSynchronizedপ্রোপার্টি শুধু ইনফরমেশনাল - এটিfalseরিটার্ন করে, তাই আপনাকে নিজে সিঙ্ক্রোনাইজেশন হ্যান্ডেল করতে হয়।