এটি সি # এর সম্প্রসারণ পদ্ধতি এবং তাদের নকশার দর্শন সম্পর্কে একটি প্রশ্ন, তাই আমি মনে করি যে এই প্রশ্নের উত্তর দেওয়ার সর্বোত্তম উপায় হ'ল এমএসডিএন এর ডকুমেন্টেশনগুলি বর্ধিত পদ্ধতির উদ্দেশ্য হিসাবে উদ্ধৃত করা :
এক্সটেনশন পদ্ধতিগুলি নতুন উত্পন্ন প্রকার তৈরি, পুনরায় সংশ্লেষ করা বা অন্যথায় মূল প্রকারটি পরিবর্তন না করেই বিদ্যমান ধরণের পদ্ধতিগুলিকে "যুক্ত" করতে সক্ষম করে। এক্সটেনশন পদ্ধতিগুলি একটি বিশেষ ধরণের স্ট্যাটিক পদ্ধতি, তবে এগুলিকে বলা হয় যেন তারা প্রসারিত ধরণের উদাহরণ হিসাবে থাকে। সি #, এফ # এবং ভিজ্যুয়াল বেসিকে লেখা ক্লায়েন্ট কোডগুলির জন্য, কোনও এক্সটেনশন পদ্ধতি এবং প্রকৃতপক্ষে কোনও ধরণের সংজ্ঞায়িত পদ্ধতিগুলির মধ্যে কল করার মধ্যে কোনও আপত্তি নেই।
...
সাধারণভাবে, আমরা আপনাকে সুপারিশ করি যে আপনি এক্সটেনশান পদ্ধতিগুলি অল্প পরিমাণে এবং কেবলমাত্র যখন আপনার করতে হবে বাস্তবায়ন করুন। যখনই সম্ভব, ক্লায়েন্ট কোড যা বিদ্যমান টাইপ প্রসারিত করতে হবে তা বিদ্যমান ধরণ থেকে প্রাপ্ত নতুন ধরণের তৈরি করে তা করা উচিত। আরও তথ্যের জন্য, উত্তরাধিকার দেখুন।
এমন কোনও প্রসারকে প্রসারিত করার জন্য কোনও এক্সটেনশন পদ্ধতি ব্যবহার করার সময় যার উত্স কোডটি আপনি পরিবর্তন করতে পারবেন না, আপনি এই ঝুঁকিটি চালান যে প্রকারের প্রয়োগের ফলে আপনার এক্সটেনশন পদ্ধতিটি ভেঙে যাবে।
আপনি যদি কোনও নির্দিষ্ট ধরণের জন্য এক্সটেনশন পদ্ধতিগুলি বাস্তবায়ন করেন তবে নীচের বিষয়গুলি মনে রাখবেন:
- প্রকারে সংজ্ঞায়িত পদ্ধতিটির মতো একই স্বাক্ষর থাকলে কোনও এক্সটেনশন পদ্ধতি কখনই ডাকা হবে না।
- নাম স্থান পর্যায়ে সম্প্রসারণ পদ্ধতি স্কোপটিতে আনা হয়। উদাহরণস্বরূপ, যদি আপনার একাধিক স্ট্যাটিক ক্লাস থাকে যার একটি একক নেমস্পেসের নামকরণে এক্সটেনশন পদ্ধতি থাকে
Extensions
তবে সেগুলি using Extensions;
নির্দেশের মাধ্যমে সমস্তটি স্কোপে আনা হবে ।
সংক্ষিপ্তসার হিসাবে, বিকাশকারীরা সরাসরি এটি না করতে পারলেও একটি বিশেষ ধরণের ক্ষেত্রে উদাহরণ পদ্ধতি যুক্ত করার জন্য এক্সটেনশন পদ্ধতিগুলি ডিজাইন করা হয় are এবং যেহেতু উদাহরণস্বরূপ পদ্ধতিগুলি সর্বদা উপস্থিত থাকলে এক্সটেনশন পদ্ধতিগুলিকে ওভাররাইড করবে (যদি উদাহরণ পদ্ধতি সিনট্যাক্স ব্যবহার করে বলা হয়), এটি কেবল তখনই করা উচিত যদি আপনি সরাসরি কোনও পদ্ধতি যোগ করতে বা শ্রেণি প্রসারিত করতে না পারেন। *
অন্য কথায়, একটি এক্সটেনশন পদ্ধতিতে যেমন একটি উদাহরণ পদ্ধতির মতো কাজ করা উচিত, কারণ এটি কোনও ক্লায়েন্টের দ্বারা একটি উদাহরণ পদ্ধতি তৈরি হতে পারে। এবং যেহেতু একটি উদাহরণ পদ্ধতি নিক্ষেপ করা উচিত যদি সেই বস্তুটি কল করা হচ্ছে null
, তবে এটি এক্সটেনশন পদ্ধতিও হওয়া উচিত।
যখন সি # 3.0 মুক্তি পায় ততক্ষনে ব্যবহার করছেন সেটি ক্লায়েন্ট লক্ষ লক্ষ ছিল: * একটি সাইড নোট, এই ঠিক অবস্থা যে LINQ এর ডিজাইনার মুখোমুখি হয় System.Collections.IEnumerable
এবং System.Collections.Generic.IEnumerable<T>
তাদের সংগ্রহের এবং উভয়, foreach
লুপ। এই শ্রেণীর ফিরে IEnumerator
বস্তু যা শুধুমাত্র দুটি পদ্ধতি ছিল Current
এবং MoveNext
আছে, তাই যেমন কোন অতিরিক্ত প্রয়োজনীয় উদাহরণস্বরূপ পদ্ধতি, যোগ Count
, Any
ইত্যাদি ক্লায়েন্টদের এই লক্ষ লক্ষ ভঙ্গ করা হবে। সুতরাং, এই কার্যকারিতাটি সরবরাহ করার জন্য (বিশেষত যেহেতু এটি কার্যকর Current
ও MoveNext
আপেক্ষিক স্বাচ্ছন্দ্যের সাথে প্রয়োগ করা যেতে পারে ), তারা এটিকে এক্সটেনশন পদ্ধতি হিসাবে প্রকাশ করেছে যা বর্তমানে বিদ্যমান যে কোনও ক্ষেত্রে প্রয়োগ করা যেতে পারেIEnumerable
উদাহরণস্বরূপ এবং আরও দক্ষ উপায়ে ক্লাস দ্বারা প্রয়োগ করা যেতে পারে। যদি সি # এর ডিজাইনাররা প্রথম দিনেই লিনকিউ প্রকাশ করার সিদ্ধান্ত নিয়েছে তবে এটির উদাহরণ পদ্ধতি হিসাবে সরবরাহ করা IEnumerable
হত এবং তারা সম্ভবত এই পদ্ধতিগুলির ডিফল্ট ইন্টারফেস বাস্তবায়ন সরবরাহ করার জন্য কোনও ধরণের সিস্টেম ডিজাইন করেছিলেন।