কম্পিউটার

C# এ জেনেরিক কীভাবে কাজ করে তা ব্যাখ্যা করুন


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

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

জেনেরিক্সে, আপনার টাইপ প্যারামিটার এবং টাইপ আর্গুমেন্ট আছে। এটি একটি পদ্ধতির অনুরূপ যার প্যারামিটার রয়েছে এবং আপনি পদ্ধতিতে আর্গুমেন্ট পাস করেন৷

জেনারিক টাইপস

একটি জেনেরিক টাইপ ঘোষণা করার জন্য সিনট্যাক্সে টাইপের নামের পরে কোণ বন্ধনীতে টাইপ প্যারামিটার থাকে। উদাহরণস্বরূপ, নীচের উদাহরণে লোকেটার হল একটি জেনেরিক ক্লাস।

public class Locator<T>
{

}

Locator-এর একটি উদাহরণ তৈরি করতে, আপনি নতুন কীওয়ার্ড ব্যবহার করেন, তারপরে ক্লাসের নাম। যাইহোক, T এর পরিবর্তে, আপনি একটি যুক্তি হিসাবে আপনি যে প্রকৃত প্রকারটি পাস করতে চান তা নির্দিষ্ট করুন। নিম্নলিখিত উদাহরণটি একটি আর্গুমেন্ট হিসাবে স্ট্রিং টাইপ পাস করে।

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);

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

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

একটি জেনেরিক টাইপ টাইপ প্যারামিটারটিকে টাইপ আর্গুমেন্ট হিসাবে ব্যবহার করতে পারে যখন জেনেরিক বেস টাইপ বা জেনেরিক ইন্টারফেস থেকে উত্তরাধিকারসূত্রে পাওয়া যায়। জেনেরিক LinkedList প্রকার অন্যদের সাথে জেনেরিক IEnumerable ইন্টারফেস প্রয়োগ করে।

public class LinkedList<T> : IEnumerable<T>

জেনারিক পদ্ধতি

একটি জেনেরিক পদ্ধতি হল একটি পদ্ধতি যা একটি টাইপ প্যারামিটার ঘোষণা করে যা আপনি পদ্ধতির ভিতরে এবং প্যারামিটার এবং রিটার্ন প্রকার হিসাবে ব্যবহার করতে পারেন। নীচের উদাহরণে, Swap হল একটি জেনেরিক পদ্ধতি যা 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 namespace-এর অভিধান ক্লাসে কী এবং মানের জন্য দুই ধরনের প্যারামিটার রয়েছে।

public class Dictionary<TKey, TValue>

অবশেষে, জেনেরিক কী হতে পারে তা জানা গুরুত্বপূর্ণ। প্রকারের জন্য, enums ছাড়া, সবকিছু জেনেরিক হতে পারে। এর মধ্যে রয়েছে −

  • ক্লাস
  • কাঠামো
  • ইন্টারফেস
  • প্রতিনিধি

টাইপ সদস্যদের জন্য, শুধুমাত্র পদ্ধতি এবং নেস্টেড প্রকারগুলি জেনেরিক হতে পারে। নিম্নলিখিত সদস্যরা সাধারণ হতে পারে না -

  • ক্ষেত্রগুলি
  • প্রপার্টি
  • ইনডেক্সার
  • নির্মাণকারী
  • ইভেন্টগুলি
  • ফাইনালাইজার

উদাহরণ

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. কীভাবে ওয়াই-ফাই এক্সটেন্ডার কাজ করে?

  2. YouTube চ্যানেলের সদস্যতা কীভাবে কাজ করে?

  3. Windows 10 এ ফাইল টাইপ কিভাবে পরিবর্তন করবেন

  4. কিভাবে পিসিতে NAT টাইপ পরিবর্তন করবেন