=============
আপডেট: আমি এই উত্তরটি এই ব্লগ প্রবেশের ভিত্তি হিসাবে ব্যবহার করেছি:
কেন রেফ এবং আউট প্যারামিটারগুলি প্রকারের প্রকরণের অনুমতি দেয় না?
এই বিষয়ে আরও মন্তব্য করার জন্য ব্লগ পৃষ্ঠা দেখুন। মহান প্রশ্নের জন্য ধন্যবাদ।
=============
এর আপনি ক্লাস আছে অনুমান করা যাক Animal, Mammal, Reptile, Giraffe, Turtleএবং Tigerসুস্পষ্ট subclassing সম্পর্ক রয়েছে।
এখন ধরুন আপনার একটা পদ্ধতি আছে void M(ref Mammal m)। Mউভয়ই পড়তে এবং লিখতে পারে m।
আপনি কি টাইপের একটি ভেরিয়েবল পাস করতেAnimal পারেন M?
না। এই ভেরিয়েবলটিতে একটি থাকতে পারে Turtleতবে Mধরে নেবে এটিতে কেবল স্তন্যপায়ী প্রাণি রয়েছে। ক Turtleনা ক Mammal।
উপসংহার 1 : refপরামিতিগুলি "বড়" করা যায় না। (স্তন্যপায়ী প্রাণীর চেয়ে আরও বেশি প্রাণী রয়েছে, তাই ভেরিয়েবলটি "বড়" হয়ে চলেছে কারণ এতে আরও বেশি জিনিস থাকতে পারে))
আপনি কি টাইপের একটি ভেরিয়েবল পাস করতেGiraffe পারেন M?
না। Mলিখতে পারেনm , এবং Mএকটি লিখতে চান পারে Tigerমধ্যে m। এখন আপনি Tigerএকটি ভেরিয়েবলের মধ্যে একটি রেখেছেন যা আসলে টাইপের Giraffe।
উপসংহার 2 : refপ্যারামিটারগুলি "ছোট" করা যায় না।
এখন বিবেচনা করুন N(out Mammal n)।
আপনি কি টাইপের একটি ভেরিয়েবল পাস করতে পারেন? Giraffe পারেন N?
না। Nলিখতে পারেনn , এবং Nএকটি লিখতে চাইতে পারে Tiger।
উপসংহার 3 :out প্যারামিটারগুলি "ছোট" করা যায় না।
আপনি কি টাইপের একটি ভেরিয়েবল পাস করতে পারেন? Animal পারেন N?
হুম।
ভাল, কেন না? Nথেকে পড়তে পারে না n, এটি কেবল এটি লিখতে পারে, তাই না? আপনি একটি লিখুনTiger টাইপের বৈকল্পের জন্য একটিAnimal এবং আপনি ঠিক আছে, ঠিক আছে?
ভুল। নিয়মটি " Nকেবল লিখতে পারে না"n " ।
নিয়মগুলি হ'ল সংক্ষেপে:
1) সাধারণত ফিরে আসার আগে Nলিখতে হয়। (যদিnNN ছোঁড়া হয় তবে সমস্ত বেট বন্ধ রয়েছে)
2) Nএটি থেকে কিছু nপড়ার আগে কিছু লিখতে হবেn ।
এটি ইভেন্টের এই ক্রমকে অনুমতি দেয়:
xপ্রকারের ক্ষেত্রটি ঘোষণা করুনAnimal ।
xএকটি outপ্যারামিটার হিসাবে পাসN ।
Nএকটি Tigerমধ্যে লিখুন n, যা একটি উপনামx ।
- অন্য থ্রেডে, কেউ একটি লিখেছেন
Turtleমধ্যেx ।
Nএর বিষয়বস্তু পড়ার চেষ্টা করে nএবং আবিষ্কার Turtleকরে যা এটি ভেরিয়েবলের ধরণের বলে মনে করে Mammal।
স্পষ্টতই আমরা এটিকে অবৈধ করতে চাই।
উপসংহার 4 : outপ্যারামিটারগুলি "বৃহত্তর" করা যায় না।
চূড়ান্ত উপসংহার : উভয়ই refবা outপ্যারামিটারগুলি তাদের ধরণের পরিবর্তিত হতে পারে। অন্যথায় এটি যাচাইযোগ্যযোগ্য সুরক্ষা ভঙ্গ করা।
যদি মৌলিক ধরণের তত্ত্বটি এই বিষয়গুলিতে আগ্রহী, তবে C # 4.0 এ কীভাবে সমবায়তা এবং বৈপরীত্য কাজ করে তা সম্পর্কে আমার সিরিজটি পড়ার বিষয়টি বিবেচনা করুন ।