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

C#-তে List এবং IList-এর পার্থক্য

মূল পার্থক্য

বিষয়List<T>IList<T>
প্রকৃতিকংক্রিট ক্লাস (Concrete Class)ইন্টারফেস (Interface)
ইনস্ট্যান্সিয়েশনnew List<T>() সম্ভবসরাসরি new IList<T>() সম্ভব না
ইমপ্লিমেন্টেশনIList<T> ইমপ্লিমেন্ট করেICollection<T>, IEnumerable<T> থেকে ইনহেরিট
উদ্দেশ্যকোনক্রিট ইমপ্লিমেন্টেশনঅবস্ট্রাকশন, লুজ কাপলিং

উদাহরণ ১: IList ইনস্ট্যান্সিয়েট করা যায় না

// ❌ কম্পাইল এরর
IList<string> ilist = new IList<string>(); 
// Error: Cannot create an instance of an interface

উদাহরণ ২: সঠিক ব্যবহার — List কে IList হিসেবে ব্যবহার

using System;
using System.Collections.Generic;

namespace DemoApplication {
    class Demo {
        static void Main(string[] args) {
            // List কে IList রেফারেন্সে রাখা (Polymorphism)
            IList<string> ilist = new List<string>();
            ilist.Add("Mark");
            ilist.Add("John");
            
            // আলাদা List অবজেক্ট
            List<string> list = new List<string>();
            list.Add("Mark");
            list.Add("John");
            
            Console.WriteLine("IList আউটপুট:");
            foreach (string s in ilist) Console.WriteLine(s);
            
            Console.WriteLine("List আউটপুট:");
            foreach (string s in list) Console.WriteLine(s);
            
            Console.ReadLine();
        }
    }
}

আউটপুট:

IList আউটপুট:
Mark
John
List আউটপুট:
Mark
John

কোনটি কখন ব্যবহার করবেন?

List<T> ব্যবহার করুন যখন:

  • কোনক্রিট ইমপ্লিমেন্টেশন দরকার
  • পারফরম্যান্স ক্রিটিক্যাল (ইন্টারফেস ডিসপ্যাচ ছাড়া)
  • List<T>-স্পেসিফিক মেথড দরকার (Capacity, TrimExcess, BinarySearch, Sort, GetRange, AsReadOnly)
  • লোকাল ভেরিয়েবল, প্রাইভেট ফিল্ড

IList<T> ব্যবহার করুন যখন:

  • মেথড প্যারামিটার বা রিটার্ন টাইপ (API ডিজাইন)
  • লুজ কাপলিং চান — ভবিষ্যতে অন্য ইমপ্লিমেন্টেশন (যেমন আপনার কাস্টম লিস্ট) বসাতে পারেন
  • यूनিট টেস্টিং-এ মক করা সহজ
  • শুধু ইন্টারফেসে ডিফাইনড মেথডই দরকার

API ডিজাইন উদাহরণ

// ✅ ভালো: IList রিটার্ন করলে ফ্লেক্সিবিলিটি থাকে
public IList<User> GetActiveUsers() {
    return _repo.GetActiveUsers().ToList(); // আন্ডারলাইন List, কিন্তু কলার জানতে হবে না
}

// ✅ ভালো: IList প্যারামিটার নিলে যেকোনো IList 임প্লিমেন্টেশন পাস করা যায়
public void ProcessItems(IList<Item> items) { }

// ❌ কম ভালো: List বাধ্য করলে কলারকে List বানাতে হয়
public void ProcessItems(List<Item> items) { }
  1. DirectX 11 এবং DirectX 12-এর পার্থক্য কী?

  2. C#-এ লিস্ট এবং অ্যারেতে পার্থক্য (List vs Array)

  3. পাইথন লিস্ট এবং অ্যারে (array) এর পার্থক্য কী?

  4. পাইথন লিস্ট এবং টাপলের পার্থক্য কী?