সি # তে, এর মধ্যে পার্থক্য কী
static readonly string MyStr;
এবং
const string MyStr;
?
সি # তে, এর মধ্যে পার্থক্য কী
static readonly string MyStr;
এবং
const string MyStr;
?
উত্তর:
আপনি যখন একটি constস্ট্রিং ব্যবহার করেন , সংকলক সংকলন সময়ে স্ট্রিংয়ের মান এম্বেড করে ।
অতএব, আপনি যদি অন্য constকোনও সমাবেশে কোনও মান ব্যবহার করেন , তবে আসল সমাবেশটি আপডেট করুন এবং মানটি পরিবর্তন করুন, আপনি যতক্ষণ না পুনরায় সংকলন করেন ততক্ষণ অন্য সমাবেশটি পরিবর্তনটি দেখতে পাবে না ।
একটি static readonlyস্ট্রিং একটি স্বাভাবিক ফিল্ড রানটাইম দিকে তাকিয়ে পরার। অতএব, যদি ক্ষেত্রের মান একটি ভিন্ন সমাবেশে পরিবর্তন করা হয়, তবে পুনরায় সংশোধন না করে সমাবেশটি লোড হওয়ার সাথে সাথে পরিবর্তনগুলি দেখা যাবে।
এর অর্থ হ'ল একটি static readonlyস্ট্রিং অ-ধ্রুবক সদস্যদের ব্যবহার করতে পারে, যেমন Environment.UserNameবা DateTime.Now.ToString()। একটি constস্ট্রিং শুধুমাত্র অন্যান্য ধ্রুবক বা লিটারেল ব্যবহার সক্রিয়া করা যেতে পারে।
এছাড়াও, একটি static readonlyস্ট্যাটিক একটি স্ট্যাটিক কনস্ট্রাক্টরে সেট করা যেতে পারে; একটি constস্ট্রিং কেবল ইনলাইন করা যেতে পারে।
নোট করুন যে একটি static stringপরিবর্তন করা যেতে পারে; static readonlyপরিবর্তে আপনি ব্যবহার করা উচিত ।
const শুধুমাত্র ধ্রুবক জন্য ব্যবহার করা উচিত - ধ্রুবক হচ্ছে মান যে কখনো , কখনো , কখনো পরিবর্তন করুন।
private constমানগুলি, কঠোরভাবে বলছি না, ধ্রুবকগুলির জন্য ব্যবহার করি ; মূলত এটি constমাইক্রো-অপ্টিমাইজেশনের উদ্দেশ্যে অপব্যবহার করে। আমি আমার "কখনই, কখনও, কখনও" বিবৃতিটির পাশে দাঁড়াতে যাচ্ছি না , এমনকি তা আমাকে ভন্ড করে তোলে। ;)
এখানে উপকার ও বিপরীতে একটি ভাল ভাঙ্গন রয়েছে :
সুতরাং, এটি প্রদর্শিত হচ্ছে যখন মানটি পরিবর্তিত হওয়ার খুব কম সম্ভাবনা থাকে বা কোনও বাহ্যিক অ্যাপ / লিবস ধ্রুবকটি ব্যবহার না করে তখন ধ্রুবকগুলি ব্যবহার করা উচিত। রান-টাইম গণনা যখন প্রয়োজন হয় বা বাহ্যিক গ্রাহকরা যদি একটি ফ্যাক্টর হয় তখন স্ট্যাটিক পঠনযোগ্য ক্ষেত্রগুলি ব্যবহার করা উচিত।
constpublic const string MyStr;
একটি সংকলন সময় ধ্রুবক (উদাহরণস্বরূপ আপনি কোনও পদ্ধতির প্যারামিটারের জন্য এটি ডিফল্ট প্যারামিটার হিসাবে ব্যবহার করতে পারেন) এবং আপনি যদি এই জাতীয় প্রযুক্তি ব্যবহার করেন তবে তা অবরুদ্ধ হবে না
static readonlypublic static readonly string MyStr;
হয় রানটাইম ধ্রুবক। এর অর্থ হ'ল অ্যাপ্লিকেশন চালু হওয়ার আগে এটির মূল্যায়ন করা হয় এবং এর আগে নয়। এ কারণেই এটি কোনও পদ্ধতির (সংকলন ত্রুটি) উদাহরণস্বরূপ ডিফল্ট প্যারামিটার হিসাবে ব্যবহার করা যায় না। এতে সঞ্চিত মানটি অবরুদ্ধ হতে পারে।
static stringবনাম সম্পর্কে ওকিউ জিজ্ঞাসা করেছিল const। উভয়ের পৃথক ব্যবহারের কেস রয়েছে (যদিও উভয়কেই স্থির হিসাবে ধরা হয়)।
শুধুমাত্র সত্যিকারের ধ্রুবক মানগুলির জন্য কনস্ট ব্যবহার করুন (যেমন আলোর গতি - তবে এটি মাঝারি অনুসারে পরিবর্তিত হয়)। এই কঠোর গাইডলাইনটির কারণ হ'ল কনস্টের মানটি কনসেন্টগুলির ব্যবহারগুলিতে প্রতিস্থাপিত হয় যা এটি উল্লেখ করে, যার অর্থ আপনার সংস্করণ সংক্রান্ত সমস্যা থাকতে পারে কনস্টের পরিবর্তনের জায়গায় পরিবর্তিত হওয়া উচিত (অর্থাত্ এটি একটি ধ্রুবক হওয়া উচিত ছিল না) সর্বোপরি). এটি এমনকি private constক্ষেত্রগুলিকে প্রভাবিত করে নোট করুন কেননা আপনার বিভিন্ন সমাবেশ এবং বেসরকারী ক্ষেত্রগুলিতে উত্তরাধিকার সূত্রে প্রাপ্ত বেস এবং সাবক্লাস থাকতে পারে ।
স্ট্যাটিক ক্ষেত্রগুলি তাদের মধ্যে ঘোষিত ধরণের সাথে আবদ্ধ থাকে। এগুলি এমন মানগুলিকে উপস্থাপনের জন্য ব্যবহৃত হয় যা প্রদত্ত ধরণের সমস্ত দৃষ্টান্তের জন্য একই হতে হবে। এই ক্ষেত্রগুলি আপনার পছন্দ অনুযায়ী যতবার লেখা যেতে পারে (কেবলমাত্র পঠনযোগ্য নির্দিষ্ট না করে)।
যদি আপনি static readonlyবনাম বোঝাতে constচান, তবে আমি static readonlyপ্রায় সব ক্ষেত্রেই সুপারিশ করতাম কারণ এটি ভবিষ্যতের আরও প্রমাণ।
আপনি static readonly stringকেবলমাত্র staticশ্রেণীর নির্মাতা বা একটি পরিবর্তনশীল প্রারম্ভিকের মান পরিবর্তন করতে পারেন, আপনি constস্ট্রিংয়ের মান কোথাও পরিবর্তন করতে পারবেন না ।