=============
আপডেট: আমি এই উত্তরটি এই ব্লগ প্রবেশের ভিত্তি হিসাবে ব্যবহার করেছি:
কেন রেফ এবং আউট প্যারামিটারগুলি প্রকারের প্রকরণের অনুমতি দেয় না?
এই বিষয়ে আরও মন্তব্য করার জন্য ব্লগ পৃষ্ঠা দেখুন। মহান প্রশ্নের জন্য ধন্যবাদ।
=============
এর আপনি ক্লাস আছে অনুমান করা যাক 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
লিখতে হয়। (যদিn
N
N
ছোঁড়া হয় তবে সমস্ত বেট বন্ধ রয়েছে)
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 এ কীভাবে সমবায়তা এবং বৈপরীত্য কাজ করে তা সম্পর্কে আমার সিরিজটি পড়ার বিষয়টি বিবেচনা করুন ।