কেন নয় তা প্রশ্নের "কেন" অংশটির উত্তর দেওয়ার জন্য List<T>
, কারণগুলি হ'ল ভবিষ্যত-প্রুফিং এবং এপিআই সরলতা।
ভবিষ্যতে প্রুফিং
List<T>
এটি সাবক্লাসিং করে সহজেই বর্ধমান করার জন্য ডিজাইন করা হয়নি; এটি অভ্যন্তরীণ বাস্তবায়নের জন্য দ্রুত হওয়ার জন্য ডিজাইন করা হয়েছে। আপনি লক্ষ্য করবেন যে এতে থাকা পদ্ধতিগুলি ভার্চুয়াল নয় এবং তাই ওভাররাইড করা যাবে না এবং এর Add
/ Insert
/ Remove
ক্রিয়াকলাপগুলিতে কোনও হুক নেই ।
এর অর্থ হ'ল যদি আপনাকে ভবিষ্যতে সংগ্রহের আচরণটি পরিবর্তন করতে হয় (যেমন লোকেরা যুক্ত করার চেষ্টা করে এমন নাল বস্তুগুলি প্রত্যাখ্যান করতে, বা যখন আপনার শ্রেণীর অবস্থা আপডেট করার মতো ঘটনা ঘটে তখন অতিরিক্ত কাজ সম্পাদন করা) তবে আপনার ধরণটি পরিবর্তন করতে হবে সংগ্রহের ক্ষেত্রে আপনি সাবক্লাস করতে পারেন এমন একটিতে ফিরে যান, যা একটি ব্রেকিং ইন্টারফেস পরিবর্তন (অবশ্যই নালকে অনুমতি না দেওয়ার মতো জিনিসগুলির শব্দার্থবিজ্ঞান পরিবর্তন করাও একটি ইন্টারফেস পরিবর্তন হতে পারে, তবে আপনার অভ্যন্তরীণ শ্রেণীর অবস্থা আপডেট করার মতো জিনিসগুলি হবে না)।
সুতরাং যে কোনও শ্রেণিকে সহজেই সাবক্লাস করা যেতে পারে যেমন যেমন Collection<T>
একটি ইন্টারফেস বা যেমন একটি ইন্টারফেস IList<T>
, ICollection<T>
বা IEnumerable<T>
আপনি নিজের অভ্যন্তরীণ বাস্তবায়নটি আপনার প্রয়োজন মেটাতে আলাদা সংগ্রহের ধরণ হিসাবে পরিবর্তন করতে পারেন, ভোক্তাদের কোড ভঙ্গ না করে কারণ এটি এখনও ফেরত যেতে পারে যে ধরণের তারা আশা করছেন।
এপিআই সরলতা
List<T>
যেমন দরকারী অপারেশনের অনেক রয়েছে BinarySearch
, Sort
ইত্যাদি। তবে এটি যদি আপনি সংগ্রহ করছেন তবে এটি সম্ভবত আপনি গ্রাহকদের নয়, তালিকার শব্দার্থবিজ্ঞান নিয়ন্ত্রণ করছেন। সুতরাং আপনার শ্রেণীর অভ্যন্তরীণভাবে এই ক্রিয়াকলাপগুলির প্রয়োজন হতে পারে তবে আপনার শ্রেণীর গ্রাহকরা তাদের কল করতে (বা এমনকি বলা উচিত) খুব কম সম্ভাবনা রয়েছে।
যেমন, একটি সহজ সংগ্রহের ক্লাস বা ইন্টারফেসের প্রস্তাব দিয়ে, আপনি আপনার এপিআই এর ব্যবহারকারীরা যে সদস্য দেখেন তাদের সংখ্যা কমিয়ে দেয় এবং তাদের ব্যবহার সহজ করে তোলে।