কম্পিউটার টিউটোরিয়াল

C#-তে জেনেরিকস কীভাবে কাজ করে?


জেনেরিকস C#-র ২.০ ভার্সনে যোগ করা হয়েছিল এবং ভাষার সবচেয়ে গুরুত্বপূর্ণ কনসেপ্টগুলোর মধ্যে একটি। এতে আপনি রিয়ൂজেবল, হাই-পারফরম্যান্স, এবং কম্পাইল-টাইমে টাইপ-সেফ কোড লিখতে পারেন। জেনেরিকস ব্যবহার করে, আপনি আপনার কোডে একটি টাইপ ব্যবহার করতে পারেন dessen পূর্বে জানা ছাড়া।

জেনেরিকস .NET-এ অনেক জায়গায় ব্যবহৃত হয়, যার মধ্যে কলেকশন, ডেলিগেট, এবং অ্যাসিনক্রোনাস কোড। জেনেরিকস দিয়ে, আপনাকে কলেকশনের সাইজ পূর্বে জানার প্রয়োজন নেই, এবং আপনি যেকোনো এলিমেন্ট টাইপের সাথে জেনেরিকস ব্যবহার করতে পারেন, এমনকি আপনার কোডের কাস্টম ডেটা টাইপসহ। C# জেনেরিক টাইপ (ক্লাস, ইন্টারফেস, ইত্যাদি) এবং জেনেরিক মেথড দুটোরই সাপোর্ট প্রদান করে।

জেনেরিকসে টাইপ প্যারামিটার এবং টাইপ আর্গুমেন্ট রয়েছে। এটি একটি মেথডের মতো যেটিতে প্যারামিটার থাকে, এবং আপনি মেথডে আর্গুমেন্ট পাস করেন।

জেনেরিক টাইপ

একটি জেনেরিক টাইপ ডিক্লেয়ার করার সিনট্যাক্স হলো টাইপের নামের পর এ্যাঙ্গেল ব্র্যাকেটে টাইপ প্যারামিটার। উদাহরণস্বরূপ, নিচের উদাহরণে Locator<T> একটি জেনেরিক ক্লাস।

public class Locator<T> { }

Locator<T>-এর একটি ইনস্ট্যান্স তৈরি করতে, আপনি new কীওয়ার্ড ব্যবহার করুন, তারপর ক্লাসের নাম। কিন্তু T-এর বদলে, আপনি আর্গুমেন্ট হিসেবে পাস করতে চান সেই একচুয়াল টাইপটি স্পেসিফাই করুন। নিচের উদাহরণে string টাইপ আর্গুমেন্ট হিসেবে পাস করা হয়েছে।

var stringLocator = new Locator<string>();

আপনি ক্লাস মেথডে টাইপ প্যারামিটার (T) ব্যবহার করতে পারেন, নিচের উদাহরণে দেখানো হয়েছে।

public class Locator<T>{     public IList<T> Items { get; set; }         public T Locate(int index){             return Items[index];         } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);

জেনেরিকসের একটি অতিরিক্ত সুবিধা হলো এডিটর দ্বারা প্রদত্ত IntelliSense। আপনি যখন Visual Studio বা VS Code-এ stringLocator.Locate(4) টাইপ করে মেথডের ওপরে হভার করবেন; তবে এটি আপনাকে দেখাবে যে এটি T-এর বদলে string রিটার্ন করছে। আপনি যদি ফলাফলকে string ছাড়া অন্য যেকোনো টাইপে অ্যাসাইন করার চেষ্টা করেন, কম্পাইলার এরর দেখাবে। উদাহরণস্বরূপ,

// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);

একটি জেনেরিক টাইপ টাইপ প্যারামিটারকে টাইপ আর্গুমেন্ট হিসেবে ব্যবহার করতে পারে যখন একটি জেনেরিক বেস টাইপ বা জেনেরিক ইন্টারফেস থেকে ইনহেরিট করা হয়। জেনেরিক LinkedList<T> টাইপ জেনেরিক IEnumerable<T> ইন্টারফেস ইম্প্লিমেন্ট করে, অন্যান্য সহ।

public class LinkedList<T> : IEnumerable<T>

জেনেরিক মেথড

একটি জেনেরিক মেথড সিম্পলি একটি মেথড যা একটি টাইপ প্যারামিটার ডিক্লেয়ার করে যা আপনি মেথডের ভিতরে এবং প্যারামিটার ও রিটার্ন টাইপ হিসেবে ব্যবহার করতে পারেন। নিচের উদাহরণে, Swap<T> একটি জেনেরিক মেথড যা T টাইপের দুটি প্যারামিটার নেয় এবং T-এর একটি ইনস্ট্যান্স রিটার্ন করে।

public class Swapper{     public T Swap<T>(T first, T second){         T temp = first;         first = second;         second = temp;         return temp;     } }

জেনেরিক টাইপের মতো, যখন আপনি একটি জেনেরিক মেথড ইনভোক করেন, এটি একটি স্ট্রংলি টাইপড ভেরিয়েবল রিটার্ন করে।

var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);

একাধিক জেনেরিক প্যারামিটার থাকতে পারে। System.Collections.Generic নেমস্পেসের Dictionary ক্লাসে দুটি টাইপ প্যারামিটার রয়েছে, কী এবং ভ্যালুর জন্য।

public class Dictionary<TKey, TValue>

শেষে, কী কী জেনেরিক হতে পারে সেটি জানা গুরুত্বপূর্ণ। টাইপের জন্য, Enum ছাড়া সবকিছু জেনেরিক হতে পারে। এতে অন্তর্ভুক্ত —

  • classes
  • structs
  • interfaces
  • delegates

টাইপ মেম্বারগুলোর জন্য, শুধু মেথড এবং নেস্টেড টাইপ জেনেরিক হতে পারে। নিচের মেম্বারগুলো জেনেরিক হতে পারে না —

  • Fields
  • Properties
  • Indexers
  • Constructors
  • Events
  • Finalizers

উদাহরণ

using System; using System.Collections.Generic; class Program{     static void Main(){         var stringLocator = new Locator<string>(){             Items = new string[] { "JavaScript", "CSharp", "Golang" }         };         string item = stringLocator.Locate(1);         Console.WriteLine(item); // CSharp         var swapper = new Swapper();         int a = 5, b = 3;         int result = swapper.Swap<int>(ref a, ref b);         Console.WriteLine($"a = {a}, b = {b}");     } } public class Locator<T>{     public IList<T> Items { get; set; }     public T Locate(int index){         return Items[index];     } } public class Swapper{     public T Swap<T>(ref T first, ref T second){         T temp = first;         first = second;         second = temp;         return temp;     } }

আউটপুট

CSharp a = 3, b = 5
  1. Wi-Fi এক্সটেন্ডার কীভাবে কাজ করে?

  2. YouTube চ্যানেল মেম্বারশিপ কীভাবে কাজ করে?

  3. উইন্ডোজ ১০-এ ফাইল টাইপ পরিবর্তন করার পদ্ধতি

  4. পিসির NAT টাইপ পরিবর্তন করে গেমিং ও স্ট্রিমিং স্পিড বাড়ান: ধাপে ধাপে গাইড