জেনেরিক্স (Generics) হলো সি#-এর একটি শক্তিশালী ফিচার, যা ডেটা টাইপ নির্দিষ্ট না করে কোডের মডুলারিটি এবং পুনঃব্যবহারযোগ্যতা বাড়ায়। জেনেরিক্স ব্যবহার করে একই ক্লাস, মেথড, ডেলিগেট বা ইন্টারফেসকে একাধিক ডেটা টাইপের জন্য ব্যবহার করা যায়। এটি টাইপ-সেফটি বজায় রাখে এবং রানটাইম ত্রুটি প্রতিরোধ করে।
জেনেরিক ক্লাস ব্যবহার করে এমন একটি ক্লাস তৈরি করা যায় যা একাধিক টাইপের সাথে কাজ করতে পারে।
csharp
Copy code
public class MyGenericClass<T>
{
private T data;
public MyGenericClass(T value)
{
data = value;
}
public T GetData()
{
return data;
}
}
var intObj = new MyGenericClass<int>(10);
Console.WriteLine("Integer Value: " + intObj.GetData());
var stringObj = new MyGenericClass<string>("Hello");
Console.WriteLine("String Value: " + stringObj.GetData());
এখানে MyGenericClass<T>
ক্লাসটি int
এবং string
দুই ধরনের ডেটা টাইপের সাথে কাজ করতে সক্ষম।
জেনেরিক মেথডের মাধ্যমে একটি মেথড তৈরি করা যায় যা একাধিক টাইপের ইনপুট গ্রহণ করতে পারে।
public class MyGenericMethods
{
public void Display<T>(T data)
{
Console.WriteLine("Data: " + data);
}
}
MyGenericMethods myGeneric = new MyGenericMethods();
myGeneric.Display<int>(100);
myGeneric.Display<string>("Hello Generics");
এখানে Display
মেথডটি int
এবং string
উভয় ধরনের ইনপুট গ্রহণ করেছে।
জেনেরিক ইন্টারফেস ব্যবহার করে ইন্টারফেসের ডেটা টাইপ নির্দিষ্ট করা যায়।
public interface IRepository<T>
{
void Add(T item);
T Get(int id);
}
public class EmployeeRepository : IRepository<Employee>
{
private List<Employee> employees = new List<Employee>();
public void Add(Employee employee)
{
employees.Add(employee);
}
public Employee Get(int id)
{
return employees.FirstOrDefault(e => e.ID == id);
}
}
এখানে IRepository<T>
ইন্টারফেসে Employee
টাইপ ব্যবহার করা হয়েছে।
জেনেরিক কনস্ট্রেইন্ট ব্যবহার করে নির্দিষ্ট ধরনের ডেটা টাইপ কেবলমাত্র গ্রহণ করা যায়।
public class MyGenericClass<T> where T : class
{
public T Data { get; set; }
}
where T : class
কনস্ট্রেইন্ট ব্যবহার করে কেবলমাত্র রেফারেন্স টাইপ (ক্লাস) গ্রহণ করা হচ্ছে। অন্যান্য কনস্ট্রেইন্টগুলো:
সি# এ জেনেরিক্স ব্যবহারে বক্সিং এবং আনবক্সিং এড়ানো যায়, ফলে মেমোরি ব্যবস্থাপনা উন্নত হয় এবং পারফরম্যান্স ভালো হয়।
List<int> numbers = new List<int>();
numbers.Add(10); // এখানে বক্সিং বা আনবক্সিং এর প্রয়োজন নেই
সি# এ কিছু গুরুত্বপূর্ণ জেনেরিক ক্লাস রয়েছে যা ডেটা স্ট্রাকচার এবং কালেকশন পরিচালনায় সহায়ক। যেমন:
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
names.Add("David");
names.ForEach(name => Console.WriteLine(name));
Dictionary<int, string> studentGrades = new Dictionary<int, string>();
studentGrades[1] = "A";
studentGrades[2] = "B";
Console.WriteLine(studentGrades[1]); // Output: A
সি# এ জেনেরিক্সের ব্যবহার কোডকে আরও সংক্ষিপ্ত, টাইপ-সেফ, এবং পুনঃব্যবহারযোগ্য করে তোলে। এটি ডেটা স্ট্রাকচার এবং কালেকশন পরিচালনায় সহায়ক এবং জটিল সফটওয়্যার অ্যাপ্লিকেশন তৈরি করতে অপরিহার্য।
আরও দেখুন...