সি # তে স্থির পদ্ধতির জন্য আনুষ্ঠানিক প্যারামিটারগুলিতে "এই" কীওয়ার্ডটি ব্যবহার করুন


286

আমি নীচের মতো সি # কোডের বেশ কয়েকটি উদাহরণ পেয়েছি:

public static int Foo(this MyClass arg)

thisএই ক্ষেত্রে কীওয়ার্ডটির অর্থ কী তার একটি ব্যাখ্যা আমি সন্ধান করতে পারিনি । কোন অন্তর্দৃষ্টি?


10
গৃহীত উত্তরের পাশাপাশি, সি # এক্সটেনশন পদ্ধতিগুলির জন্য একজনকে অবশ্যই অফিসিয়াল এমএসডিএন ডকুমেন্টেশন চেক আউট করতে হবে ।
ভলকান রেভেন

4
এক্সটেনশন পদ্ধতিগুলি সুবিধাজনক তবে সেগুলি তৈরি / ব্যবহার করার সময় আমাদের অবশ্যই সাবধানতা অবলম্বন করতে হবে - সেগুলি ভেঙে যেতে পারে! অফিসিয়াল এমএসডিএন ডকুমেন্টেশনের সাধারণ নির্দেশিকা থেকে উদ্ধৃতি : "সাধারণভাবে, আমরা আপনাকে সুপারিশ করি যে আপনি এক্সটেনশান পদ্ধতিগুলি অল্প পরিমাণে এবং কেবল তখনই প্রয়োগ করতে পারেন। ... এমন কোনও প্রসারকে বাড়ানোর জন্য যখন কোনও এক্সটেনশন পদ্ধতি ব্যবহার করা হয় যার উত্স কোডটি আপনি পরিবর্তন করতে পারবেন না, আপনি এই ধরণের বাস্তবায়নের পরিবর্তনের ফলে আপনার সম্প্রসারণের পদ্ধতিটি ভেঙে যাবে এমন ঝুঁকিটি চালান।
কৃষ্ণ গুপ্ত

তার মানে কি এই সম্ভব হবে? কারণ এটাই আমি খুঁজছি।
ফেসপাম 42

উত্তর:


274

এটি একটি এক্সটেনশন পদ্ধতিব্যাখ্যা জন্য এখানে দেখুন ।

এক্সটেনশন পদ্ধতিগুলি বিকাশকারীদের একটি বিদ্যমান সিএলআর টাইপের সর্বজনীন চুক্তিতে নতুন পদ্ধতি যুক্ত করার অনুমতি দেয়, এটি উপ-শ্রেণি না করে বা মূল ধরণের পুনরায় সংকলন না করে। এক্সটেনশন পদ্ধতিগুলি আজ ডাইনামিক ভাষাগুলির মধ্যে জনপ্রিয় "হাঁস টাইপিং" সমর্থনের নমনীয়তার সাথে মিশ্রিত করতে সহায়তা করে জোরালোভাবে টাইপ করা ভাষাগুলির পারফরম্যান্স এবং সময়ের সংকলন।

এক্সটেনশন পদ্ধতিগুলি বিভিন্ন উপকারী দৃশ্যাবলী সক্ষম করে এবং সত্যই শক্তিশালী LINQ ক্যোয়ারী ফ্রেমওয়ার্কটিকে সম্ভব করে তুলতে সহায়তা করে ...

এর অর্থ আপনি কল করতে পারেন

MyClass myClass = new MyClass();
int i = myClass.Foo();

বরং

MyClass myClass = new MyClass();
int i = Foo(myClass);

এটি নীচে বর্ণিত হিসাবে সাবলীল ইন্টারফেসগুলি নির্মাণের অনুমতি দেয় ।


উপ-শ্রেণিবদ্ধকরণ শক্ত
গেরি

@ গেরি - আপনার অর্থ কী?
প্রীত সংঘ

9
দুঃখিত, কিছুটা ব্যঙ্গাত্মক - আজকাল প্রচুর সিনট্যাক্স এমন সমস্যাগুলির সমাধান বলে মনে হচ্ছে যা আমি জানতাম না সমস্যাগুলি ছিল। পঠনযোগ্যতা খুব উচ্চ অগ্রাধিকার হওয়া উচিত।
গেরি

2
@ জেরি সত্যি কথা বলতে আপনার কাছে ক্লাসিক ব্লাব প্যারাডক্সের মতো ধরণের শব্দ শোনাচ্ছে । আজকাল প্রচুর সিনট্যাক্স আপনার সমস্যাগুলির সমাধান করে কারণ আপনি জানতেন না যে এর চেয়ে ভালতর কোনও উপায় আছে বা আপনি যে ধরণের কাজটির জন্য এই সিনট্যাক্সটি দুর্দান্ত। ' এটি একটি সমস্যার সন্ধানের সমাধান ' সম্পর্কে বেশিরভাগ মন্তব্যগুলি আসলে ' এই বৈশিষ্ট্যটি কীভাবে কাজ করে তা আমি জানি না, সুতরাং এটি অবশ্যই বেহুদা '।
মায়ার্ডিন এমরিস

53

স্কট গু এর উদ্ধৃত ব্লগ পোস্ট এটিকে সুন্দরভাবে ব্যাখ্যা করেছে।

আমার জন্য, প্রশ্নের উত্তরটি সেই পোস্টের নিম্নলিখিত বিবৃতিতে রয়েছে:

উপরে স্ট্যাটিক পদ্ধতিতে টাইপ স্ট্রিংয়ের প্রথম প্যারামিটার আর্গুমেন্টের আগে কীভাবে "এই" কীওয়ার্ড রয়েছে তা নোট করুন। এটি কম্পাইলারকে বলে যে "স্ট্রিং" টাইপের অবজেক্টগুলিতে এই নির্দিষ্ট এক্সটেনশন পদ্ধতিটি যুক্ত করা উচিত। ইসভালিডমেল অ্যাড্রেস () পদ্ধতি প্রয়োগের মধ্যে আমি তারপরে পদ্ধতিটি চালু হবার প্রকৃত স্ট্রিং উদাহরণের সমস্ত জনসাধারণের সম্পত্তি / পদ্ধতি / ইভেন্টগুলিতে অ্যাক্সেস করতে পারি এবং এটি বৈধ ইমেল কিনা তা নির্ভর করে সত্য / মিথ্যা ফিরিয়ে আনতে পারি।


9
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি কেবলমাত্র একমাত্র উত্তর যা thisপদ্ধতির স্বাক্ষরে কীওয়ার্ডের আসল উদ্দেশ্য কী তা বোঝায় explains অন্যান্য উত্তরগুলি কেবল অসহায়ভাবে বলে "এটি একটি এক্সটেনশন পদ্ধতি।" এই উত্তরটি পড়া না হওয়া পর্যন্ত প্রসারণের পদ্ধতিগুলি কীভাবে প্রসারিত হয় তার সাথে কীভাবে "সংযুক্ত" হয় তা আমি কখনই পুরোপুরি বুঝতে পারি নি। ধন্যবাদ!
লেউস থেরিন

13

প্রীত সংঘের ব্যাখ্যা ছাড়াও:
ইন্টেলিসেন্স নীল তীরের সাহায্যে এক্সটেনশন পদ্ধতিগুলি প্রদর্শন করে (যেমন "সমষ্টি <>" এর সামনে):

এখানে চিত্র বর্ণনা লিখুন

তোমার দরকার একটি

using the.namespace.of.the.static.class.with.the.extension.methods;

এক্সটেনশন পদ্ধতিগুলি উপস্থিত হওয়ার জন্য এবং উপলভ্য হওয়ার জন্য, যদি সেগুলি কোড ব্যবহার করে আলাদা আলাদা নামস্থানে থাকে।



4

আমি অন্য দিন কেবল এটি নিজেই শিখেছি: এই কীওয়ার্ডটি সংজ্ঞায়িত করে যে পদ্ধতিটি শ্রেণীর একটি এক্সটেনশন হচ্ছে যা এটি এগিয়ে যায়। সুতরাং আপনার উদাহরণস্বরূপ, মাইক্লাসে ফু নামে একটি নতুন এক্সটেনশন পদ্ধতি থাকবে (যা কোনও পরামিতি গ্রহণ করে না এবং কোনও পূর্বাবস্থায় ফেরত দেয়; এটি অন্য কোনও পাবলিক পদ্ধতির মতো ব্যবহার করা যেতে পারে)।


1

"এটি" প্যারামিটার তালিকার পরবর্তী শ্রেণিটি প্রসারিত করে

সুতরাং নীচে পদ্ধতিতে স্বাক্ষর "এটি" "স্ট্রিং" প্রসারিত করে। পদ্ধতিতে সাধারণ আর্গুমেন্ট হিসাবে লাইনটি ফাংশনে প্রেরণ করা হয়। পাবলিক স্ট্যাটিক স্ট্রিং [] স্প্লিটসিএসভিলাইন (এই স্ট্রিং লাইন)

উপরের উদাহরণে "এই" শ্রেণিটি "স্ট্রিং" শ্রেণিতে অন্তর্নির্মিত প্রসারিত করছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.