C#-এ, const এবং readonly কীওয়ার্ড উভয়ই অপরিবর্তনীয় মানগুলিকে সংজ্ঞায়িত করতে ব্যবহৃত হয় যেগুলি ঘোষণা করার পরে পরিবর্তন করা যায় না। যাইহোক, উভয়ের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
কনস্ট
কনস্ট মডিফায়ার ধ্রুবক মানগুলি ঘোষণা করে যা কম্পাইল-টাইমে পরিচিত এবং পরিবর্তন হয় না, অর্থাৎ তারা অপরিবর্তনীয়। C# এ, আপনি শুধুমাত্র অন্তর্নির্মিত প্রকারগুলিকে const হিসাবে চিহ্নিত করতে পারেন। ব্যবহারকারী-সংজ্ঞায়িত প্রকার যেমন ক্লাস, স্ট্রাকট ইত্যাদি কনস্ট হতে পারে না। এছাড়াও, পদ্ধতি, বৈশিষ্ট্য বা ইভেন্টের মতো ক্লাস সদস্য প্রকারগুলিকে ধ্রুবক হিসাবে চিহ্নিত করা যাবে না।
ঘোষণার সময় আপনাকে অবশ্যই ধ্রুবকগুলি শুরু করতে হবে৷
<প্রি>ক্লাস পিরিয়ড{ পাবলিক কনস্ট int ঘন্টা =12; public const int minutes =60;}ধ্রুবকগুলিকে যেকোন দৃশ্যমানতা পরিবর্তনকারী দিয়ে চিহ্নিত করা যেতে পারে, যেমন ব্যক্তিগত, সর্বজনীন, সুরক্ষিত, সুরক্ষিত অভ্যন্তরীণ, বা ব্যক্তিগত সুরক্ষিত৷
ধ্রুবকগুলি স্থির মান হিসাবেও কাজ করে, যেমন ধ্রুবকের মান ক্লাসের সমস্ত দৃষ্টান্তের জন্য একই। আপনাকে স্ট্যাটিক কীওয়ার্ড দিয়ে তাদের স্পষ্টভাবে চিহ্নিত করতে হবে না। আপনি সেই ক্লাসের ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করে ধ্রুবকগুলি অ্যাক্সেস করতে পারবেন না তবে ক্লাসের নাম ব্যবহার করতে হবে৷
শুধুমাত্র পাঠ্য
শুধুমাত্র পঠন হিসাবে চিহ্নিত একটি ক্ষেত্র শুধুমাত্র ঘোষণার সময় বা কনস্ট্রাক্টরে বরাদ্দ করা যেতে পারে। একবার ক্লাসের ইন্সট্যান্স তৈরি হয়ে গেলে, আপনি শুধুমাত্র পঠনযোগ্য ক্ষেত্র পরিবর্তন করতে পারবেন না।
যদি ক্ষেত্রটি একটি মান প্রকারের হয়, তবে এটিকে শুধুমাত্র পঠনযোগ্য হিসেবে চিহ্নিত করা এটিকে অপরিবর্তনীয় করে তোলে। অন্যদিকে, যদি একটি পঠনযোগ্য ক্ষেত্র একটি রেফারেন্স টাইপ হয়, তবে আপনি এখনও পরিবর্তনশীল দ্বারা উল্লেখ করা বস্তুর ডেটা পরিবর্তন করতে পারেন। যাইহোক, আপনি একটি নতুন বস্তুর দিকে নির্দেশ করতে সেই রেফারেন্সটি পরিবর্তন করতে পারবেন না।
শ্রেণীর ব্যক্তি{ ব্যক্তিগত পঠনযোগ্য স্ট্রিং _title; ব্যক্তিগত পঠনযোগ্য স্ট্রিং _স্কিল; সর্বজনীন ব্যক্তি (স্ট্রিং শিরোনাম, স্ট্রিং দক্ষতা){ _title =শিরোনাম; দক্ষতা =দক্ষতা; }}
একটি পঠনযোগ্য ক্ষেত্রটি ক্ষেত্র ঘোষণায় এবং যে কোনও কনস্ট্রাক্টরে একাধিকবার বরাদ্দ করা যেতে পারে। এছাড়াও, ব্যবহৃত কনস্ট্রাক্টরের উপর নির্ভর করে এর বিভিন্ন মান থাকতে পারে।
উভয়ের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য হল যখন একটি সমাবেশে ঘোষিত একটি const বা শুধুমাত্র পঠনযোগ্য ক্ষেত্র অন্য সমাবেশে ব্যবহার করার সময় কম্পাইল করা হয়৷
-
কনস্ট মানের ক্ষেত্রে, এটি একটি সন্ধান-প্রতিস্থাপনের মতো। ধ্রুবক মান দ্বিতীয় সমাবেশের মধ্যবর্তী ভাষায় 'বেকড ইন' হয়। এর মানে হল যে আপনি যদি ধ্রুবক আপডেট করেন, দ্বিতীয় অ্যাসেম্বলিতে এখনও প্রথম মান থাকবে যতক্ষণ না আপনি এটি পুনরায় কম্পাইল করেন।
-
শুধুমাত্র পঠনযোগ্য মানের ক্ষেত্রে, এটি একটি মেমরি অবস্থানের রেফারেন্সের মতো। মানটি দ্বিতীয় সমাবেশের মধ্যবর্তী ভাষায় বেক করা হয় না। এর মানে হল যে মেমরি অবস্থান আপডেট করা হলে, দ্বিতীয় সমাবেশ পুনরায় সংকলন ছাড়াই নতুন মান পায়। শুধুমাত্র পঠনযোগ্য ক্ষেত্র আপডেট করার অর্থ হল শুধুমাত্র প্রথম সমাবেশটি কম্পাইল করা প্রয়োজন কোনো ব্যবহারকারীর সমাবেশকে কম্পাইল না করেই।
উদাহরণ
ব্যবহার করে সিস্টেম;ক্লাস প্রোগ্রাম{static void Main(){ Console.WriteLine(Period.HOURS); var ব্যক্তি =নতুন ব্যক্তি ("জন", "প্রোগ্রামার"); person.print(); }}ক্লাস পিরিয়ড{ পাবলিক কনস্ট ইন HOURS =12; public const int MINUTES =60;}class Person{private readonly string _title; ব্যক্তিগত পঠনযোগ্য স্ট্রিং _স্কিল; সর্বজনীন ব্যক্তি (স্ট্রিং শিরোনাম, স্ট্রিং দক্ষতা){ _title =শিরোনাম; দক্ষতা =দক্ষতা; } সর্বজনীন শূন্যতা পরিবর্তন(স্ট্রিং দক্ষতা) } সর্বজনীন অকার্যকর প্রিন্ট(){ Console.WriteLine($"{_title}:{_skill}"); }}
আউটপুট
12 জন:প্রোগ্রামার