মাইক্রোসফ্ট ইন্টারমিডিয়েট ল্যাঙ্গুয়েজে (এমএসআইএল) 0 টাইপ কেন?


90

অনেকগুলি এমএসআইএল তালিকায় আমি নিম্নলিখিতটি পর্যবেক্ষণ করেছি:

System.Nullable`1<!0> etc ...

বা

class !0 etc ...

!0এই পরিস্থিতিতে এর অর্থ কী ?

উত্তর:


120

আপনি নেট নেট অ্যাসেমব্লিং দেখতে আপনি যে ডিসকোপিলারটি ব্যবহার করেন এটি এটি হল। এটি ildasm.exe এর আচরণ, অন্য প্রতিচ্ছবি বা আইএলএসপিএসের মতো এই অধিকারটি পান। মাইক্রোসফ্ট প্রোগ্রামার যিনি এটি লিখেছিলেন এটি একটি শর্টকাট নিয়েছে, তিনি আইএল থেকে একটি স্ট্রিং উত্পন্ন করে যা মেটাডেটাতে যুক্তি নামটি অনুসন্ধান করার জন্য অতিরিক্ত কোড না লিখে কেবল প্রকারের যুক্তিটি এনকোড করার পদ্ধতিটি প্রদর্শন করে।

!nজেনেরিক টাইপের এন-থ টাইপ আর্গুমেন্ট হিসাবে আপনাকে পড়তে হবে । যেখানে! 0 এর অর্থ "প্রথম ধরণের আর্গুমেন্ট", 1 এর অর্থ "দ্বিতীয় ধরণের আর্গুমেন্ট", ইত্যাদি ce নুলাবাল <> এর জন্য, আপনি জানেন যে '! 0` এর অর্থ এমএসডিএন নিবন্ধ থেকে' টি '।

আপনিও এরকম কিছু মুখোমুখি হতে পারেন !!T। দুটি বিস্মৃত চিহ্ন চিহ্ন জেনেরিক পদ্ধতির জন্য একটি ধরণের আর্গুমেন্ট নির্দেশ করে । এবার ildasm.exe নেই টাইপ যুক্তি নাম পরিবর্তে ব্যবহার করার চেহারা !!0। প্রোগ্রামার কেন জেনেরিক ধরণের ক্ষেত্রে শর্টকাট নিয়েছে তবে জেনেরিক পদ্ধতিতে নয়, বিপরীত প্রকৌশলী করা শক্ত। ইল্ডাসম একটি চমকপ্রদ প্রোগ্রাম এবং এটি সি ++ কোডিং স্টাইলে লেখা হয় যা। নেট এ অন্য সি ++ কোডের থেকে একেবারেই আলাদা। শৃঙ্খলাবদ্ধ নয়, শূন্যের মতবিরোধ নয় যে এটি কোনও ইন্টার্নের অ্যাসাইনমেন্ট ছিল :)

"নুলাবল" এ `1 প্রত্যয়টি জেনেরিক টাইপের নামের জন্য একটি সাধারণ এনকোডিং, এটি জেনেরিক ধরণের এক ধরণের আর্গুমেন্টের ইঙ্গিত দেয়। অন্য কথায়, নুল << জন্য আপনি কখনই দেখতে পাবেন না! 1 ব্যবহার হচ্ছে।

সুতরাং কেবল !0"টি" হিসাবে পড়ুন । অথবা আরও ভাল ডিকম্পিলার ব্যবহার করুন।


35

এটি একটি জেনেরিক ধরণের পরামিতি।

তারা অবস্থানগত।

তারা কীভাবে ব্যবহৃত হয় তা দেখতে কিছু জেনেরিক কোডটি বিভক্ত করুন (আইএল বনাম সি # তুলনা করুন)।


4
যদি আমি ট্রাইরোসলিন ব্যবহার করি তবে আমি তা পাই না ... goo.gl/ZZKE38 আমি পেয়েছি !Tএবং !!T, জেনেরিক প্যারামিটারটি সমন্বিত শ্রেণীর বা পদ্ধতিটির কিনা তার উপর নির্ভর করে ... আমি ইলডাস ব্যবহার করি তবে একই
xanatos

@ xanatos সবসময় না। আমিও কোড দেখতে পাই ldfld class System.Collections.Generic.Dictionary``2<!0, !1> valuetype System.Collections.Generic.Dictionary``2/Enumerator<!TKey, !TValue>::dictionaryবা এর মতোই call instance void class System.Collections.Generic.Dictionary``2<!TKey, !TValue>::Insert(!0, !1, bool)। কাঁচা আইএল কেবল যাইহোক অবস্থানগত যুক্তি ব্যবহার করে, যদিও - এটি !TKeyইতিমধ্যে আইএলকে আরও পঠনযোগ্য করার প্রচেষ্টা। এটি সবসময় ভাল কাজ করে না? ইসিএমএ স্পেক সর্বদা অবস্থানগত !0/ !00পাশাপাশি ব্যবহার করে ।
লুয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.