এখানে মূল বিভ্রান্তি হ'ল আপনি ধরে নিচ্ছেন যে সমস্ত নেট নেটব্রেরি (এই ক্ষেত্রে, বর্ধিত সংখ্যাসূচক গ্রন্থাগার, যা ছাত্রলীগের একটি অংশ নয় ) স্ট্যান্ডার্ড সি # তে লিখিত হয়েছে। এটি সর্বদা ক্ষেত্রে হয় না এবং বিভিন্ন ভাষার বিভিন্ন বিধি থাকে।
স্ট্যান্ডার্ড সি # তে, আপনি যে কোডটি দেখছেন সেটির ফলে অপারেটর ওভারলোড রেজোলিউশনটি যেভাবে কাজ করে তার ফলস্বরূপ স্ট্যাক ওভারফ্লো হবে। তবে কোডটি আসলে স্ট্যান্ডার্ড সি # তে নেই - এটি মূলত সি # সংকলকের অননুমোদিত বৈশিষ্ট্যগুলি ব্যবহার করে। অপারেটরকে কল করার পরিবর্তে, এই কোডটি প্রকাশ করে:
ldarg.0
ldarg.1
ceq
ret
এটাই :) 100% সমতুল্য সি # কোড নেই - এটি নিজের ধরণের মাধ্যমে সি # তে সহজভাবে সম্ভব নয় ।
তারপরেও, সি # কোডটি সংকলনের সময় প্রকৃত অপারেটর ব্যবহার করা হয় না - সংকলক এই ক্ষেত্রে যেমন একচেটিয়া অপ্টিমাইজেশন করে, যেখানে এটি op_Equality
কলটি সহজ সরল করে প্রতিস্থাপন করে ceq
। আবার, আপনি DoubleEx
এটি নিজের স্ট্রাক্টে প্রতিলিপি করতে পারবেন না - এটি সংকলক যাদু।
এটি নেট। নেট-এ কোনও অনন্য পরিস্থিতি নয় - প্রচুর কোড যা বৈধ নয়, মান সি #। কারণগুলি হ'ল (ক) সংকলক হ্যাক এবং (খ) একটি ভিন্ন ভাষা, বিজোড় (সি) রানটাইম হ্যাক (আমি আপনার দিকে তাকাচ্ছি Nullable
!)।
যেহেতু রোজলিন সি # সংকলক ওপেন উত্স, তাই আপনাকে ওভারলোড রেজোলিউশনের সিদ্ধান্ত নিয়েছে এমন স্থানে আমি আপনাকে সত্যিই নির্দেশ করতে পারি:
সমস্ত বাইনারি অপারেটরগুলি সমাধান করার জায়গা
অভ্যন্তরীণ অপারেটরদের জন্য "শর্টকাট"
আপনি যখন শর্টকাটগুলি দেখুন, আপনি দেখবেন যে দ্বিগুণ এবং দ্বিগুণ ফলাফলের মধ্যে অন্তর্নিহিত ডাবল অপারেটরের ক্ষেত্রে কখনও কখনও প্রকৃত ==
অপারেটরটিতে টাইপ অনুযায়ী সংজ্ঞায়িত হয় না। .NET টাইপ সিস্টেমে ভান করতে Double
হবে যে এটি অন্যর মতো টাইপ, তবে সি # হয় না - double
এটি সি # তে একটি আদিম।