সমস্ত স্ট্যান্ডেলোন হ্যাপ অবজেক্টস উত্তরাধিকার সূত্রে প্রাপ্ত Object
; এটি উপলব্ধি করে কারণ সমস্ত স্ট্যান্ডলোন হ্যাপ অবজেক্টের অবশ্যই কিছু সাধারণ দিক থাকতে হবে, যেমন তাদের ধরণের চিহ্নিতকরণের উপায়। অন্যথায়, আবর্জনা সংগ্রাহকের যদি অজানা ধরণের কোনও হিপ অবজেক্টের রেফারেন্স থাকে, তবে এটি জানার উপায় ছিল না যে object বস্তুর সাথে সম্পর্কিত মেমরির ব্লাবের মধ্যে কী কী বিট রয়েছে তা অন্যান্য গাদা বস্তুর রেফারেন্স হিসাবে বিবেচনা করা উচিত।
তদ্ব্যতীত, টাইপ সিস্টেমের মধ্যে কাঠামোর সদস্য এবং শ্রেণীর সদস্যদের সংজ্ঞা দেওয়ার জন্য একই পদ্ধতিটি ব্যবহার করা সুবিধাজনক। মান-ধরণের স্টোরেজ অবস্থানগুলির আচরণ (ভেরিয়েবল, প্যারামিটার, ক্ষেত্রগুলি, অ্যারে স্লট ইত্যাদি) শ্রেণি-ধরণের স্টোরেজ অবস্থানের থেকে পৃথক, তবে এই জাতীয় আচরণগত পার্থক্য উত্স-কোড সংকলক এবং এক্সিকিউশন ইঞ্জিনে প্রাপ্ত রয়েছে (সহ) জেআইটি সংকলক) টাইপ সিস্টেমে প্রকাশের পরিবর্তে।
এর একটি পরিণতি হ'ল একটি মান প্রকারের কার্যকরভাবে কার্যকরভাবে দুটি ধরণের সংজ্ঞা দেওয়া হয় - একটি স্টোরেজ-অবস্থানের ধরণ এবং একটি হিপ-অবজেক্ট টাইপ। প্রাক্তন সুস্পষ্টভাবে পরবর্তীকালে রূপান্তরিত হতে পারে, এবং আধুনিকটি টাইপকাস্টের মাধ্যমে প্রাক্তনে রূপান্তরিত হতে পারে। উভয় ধরণের রূপান্তর কাজটি সরকারী এবং বেসরকারী ক্ষেত্রের মধ্যে প্রশ্নের মধ্যে থাকা ধরণের একটি উদাহরণ থেকে অনুলিপি করে। তদ্ব্যতীত, জেনেরিক সীমাবদ্ধতাগুলি ব্যবহার করে ইন্টারফেস সদস্যদের প্রথমে কোনও মান-ধরণের স্টোরেজ অবস্থানে সরাসরি অনুরোধ করা সম্ভব, এটির অনুলিপি তৈরি না করেই।
এগুলি সবই গুরুত্বপূর্ণ কারণ মান ধরণের হিপ অবজেক্টের উল্লেখগুলি শ্রেণীর রেফারেন্সগুলির মতো আচরণ করে না মান মানের মতো like উদাহরণস্বরূপ, নিম্নলিখিত কোডটি বিবেচনা করুন:
স্ট্রিং টেস্টমিশ্রণকারী <টি> (টি এটি) যেখানে টি: আইনিউমেটর <স্ট্রিং>
{
var it2 = it;
it.MoveNext ();
it2.MoveNext ();
এটি ফেরত দিন। বর্তমান;
}
পাবলিক শূন্য পরীক্ষা ()
{
var theList = নতুন তালিকা <স্ট্রিং> ();
theList.Add ( "ফ্রেড");
theList.Add ( "জর্জ");
theList.Add ( "পার্সি");
theList.Add ( "মলি");
theList.Add ( "রন");
var enum1 = theList.GetEnumerator ();
আইনিউমেটর <স্ট্রিং> এনুম 2 = এনাম 1;
Debug.Print (testEnumerator (enum1));
Debug.Print (testEnumerator (enum1));
Debug.Print (testEnumerator (enum2));
Debug.Print (testEnumerator (enum2));
}
যদি testEnumerator()
পদ্ধতিটি মান ধরণের স্টোরেজ অবস্থানটি পাস করা হয় তবে it
একটি উদাহরণ পাবেন যার সরকারী এবং ব্যক্তিগত ক্ষেত্রগুলি উত্তীর্ণিত মান থেকে অনুলিপি করা হয়েছে। স্থানীয় ভেরিয়েবল it2
আরও একটি উদাহরণ ধারণ করবে যার ক্ষেত্রগুলি সমস্ত থেকে অনুলিপি করা হয়েছে it
। কল MoveNext
করা it2
কোনও প্রভাব ফেলবে না it
।
উপরের কোডটি যদি শ্রেণীর ধরণের স্টোরেজ অবস্থানটি পাস করা হয় তবে উত্তীর্ণের মান it
, এবং it2
, সমস্ত একই বস্তুর উল্লেখ করবে এবং এইভাবে MoveNext()
তাদের যে কোনওটিতে কল করলে তাদের সকলকে কার্যকরভাবে এটি কল করা হবে।
লক্ষ্য করুন ভোটদান List<String>.Enumerator
থেকে IEnumerator<String>
কার্যকরভাবে একটি বর্গ টাইপ একটি মান টাইপ থেকে এটা সক্রিয়। হিপ অবজেক্টের ধরণ List<String>.Enumerator
তবে এর আচরণ একই নামের মান প্রকারের থেকে খুব আলাদা হবে।
object
অংশে .NET কাঠামোর একটি মূল রয়েছে কারণ এটি সমস্ত অবজেক্ট জুড়ে কিছু প্রাথমিক ক্ষমতা সরবরাহ করে যেমনToString()
GetHashCode()