আমি একটি ব্যাখ্যায় আমার হাত চেষ্টা করতে যাচ্ছি:
আমি মনে করি আমরা বুঝতে পারি যে মানগুলি কীভাবে সঠিকভাবে কাজ করে? মান প্রকারগুলি (int, দীর্ঘ, কাঠামো ইত্যাদি)। যখন আপনি এগুলি কোনও রেফ-কমান্ড ব্যতীত কোনও ফাংশনে প্রেরণ করেন এটি ডেটা কপি করে । ফাংশনে সেই ডেটাতে আপনি যে কিছু করেন তা কেবল অনুলিপিটিকেই প্রভাবিত করে, মূলটি নয়। রেফ কমান্ড ACTUAL ডেটা প্রেরণ করে এবং যে কোনও পরিবর্তন ফাংশনের বাইরে থাকা ডেটাগুলিকে প্রভাবিত করবে।
বিভ্রান্তিকর অংশে ঠিক আছে, রেফারেন্স ধরণের:
একটি রেফারেন্স প্রকার তৈরি করতে দেয়:
List<string> someobject = new List<string>()
আপনি যখন কোনও নতুন স্থাপন করেন , দুটি অংশ তৈরি করা হয়:
- মেমোরির ব্লক যা কোনওরকমের জন্য ডেটা ধারণ করে ।
- ডেটা যে ব্লক একটি রেফারেন্স (পয়েন্টার)।
এখন আপনি কখন পাঠাবো someobject এটা সুত্র অনুলিপি ছাড়া একটি পদ্ধতি মধ্যে রেফারেন্স পয়েন্টার, ডেটা নেই। সুতরাং আপনার এখন এটি আছে:
(outside method) reference1 => someobject
(inside method) reference2 => someobject
দুটি একই রেফারেন্স একই অবজেক্টের দিকে নির্দেশ করছে। আপনি যদি রেফারেন্স 2 ব্যবহার করে কোনও সম্পত্তিতে কোনও সম্পত্তি পরিবর্তন করেন তবে এটি রেফারেন্স 1 দ্বারা নির্দেশিত একই ডেটাটিকে প্রভাবিত করবে।
(inside method) reference2.Add("SomeString");
(outside method) reference1[0] == "SomeString" //this is true
আপনি যদি রেফারেন্স 2 বাতিল করে দেন বা নতুন ডেটাতে এটি নির্দেশ করেন তবে এটি রেফারেন্স 1 এবং ডেটা রেফারেন্স 1 কে পয়েন্ট করবে না।
(inside method) reference2 = new List<string>();
(outside method) reference1 != null; reference1[0] == "SomeString" //this is true
The references are now pointing like this:
reference2 => new List<string>()
reference1 => someobject
এখন আপনি কোনও পদ্ধতিতে রেফ দ্বারা কোনও স্থানে পাঠানোর সময় কী হবে ? প্রকৃত রেফারেন্স করার someobject পদ্ধতিতে পাঠানো হয়। সুতরাং আপনার কাছে এখন কেবলমাত্র ডেটা সম্পর্কিত একটি উল্লেখ রয়েছে:
(outside method) reference1 => someobject;
(inside method) reference1 => someobject;
কিন্তু এটার মানে কি? এটি দুটি প্রধান বিষয় ব্যতীত রেফ দ্বারা না করে কোনও পাঠানোর মতোই কাজ করে:
1) আপনি যদি পদ্ধতির অভ্যন্তরে রেফারেন্সটি বাতিল করেন তবে এটি পদ্ধতির বাইরে থাকা শূন্য করে দেবে।
(inside method) reference1 = null;
(outside method) reference1 == null; //true
2) আপনি এখন সম্পূর্ণ ভিন্ন ডেটা অবস্থানের রেফারেন্সটি নির্দেশ করতে পারেন এবং ফাংশনের বাইরের রেফারেন্সটি এখন নতুন ডেটা অবস্থানের দিকে নির্দেশ করবে।
(inside method) reference1 = new List<string>();
(outside method) reference1.Count == 0; //this is true
MyClass
এটি কোনওclass
প্রকার, অর্থাত্ একটি রেফারেন্স টাইপ। সেক্ষেত্রে আপনি যে অবজেক্টটি পাস করবেনmyFunction
তা কোনওref
/out
কীওয়ার্ড না দিয়ে এমনকি সংশোধন করতে পারে ।myFunction
একটি নতুন রেফারেন্স পাবেন যা একই অবজেক্টের দিকে নির্দেশ করে এবং এটি একই বস্তুকে যতটা চায় তা পরিবর্তন করতে পারে। মূলশব্দটি যে পার্থক্যটিref
তৈরি করবে তা হ'ল একই বস্তুর একই রেফারেন্সmyFunction
পেয়েছে । এটি কেবল তখনই গুরুত্বপূর্ণ যখন রেফারেন্সটি অন্য কোনও বস্তুর প্রতি নির্দেশ করতে হবে ।myFunction