সি # তে 'কনস্ট্রিং স্ট্রিং' বনাম 'স্ট্যাটিক রিডোনলি স্ট্রিং'


উত্তর:


170

আপনি যখন একটি constস্ট্রিং ব্যবহার করেন , সংকলক সংকলন সময়ে স্ট্রিংয়ের মান এম্বেড করে ।
অতএব, আপনি যদি অন্য constকোনও সমাবেশে কোনও মান ব্যবহার করেন , তবে আসল সমাবেশটি আপডেট করুন এবং মানটি পরিবর্তন করুন, আপনি যতক্ষণ না পুনরায় সংকলন করেন ততক্ষণ অন্য সমাবেশটি পরিবর্তনটি দেখতে পাবে না ।

একটি static readonlyস্ট্রিং একটি স্বাভাবিক ফিল্ড রানটাইম দিকে তাকিয়ে পরার। অতএব, যদি ক্ষেত্রের মান একটি ভিন্ন সমাবেশে পরিবর্তন করা হয়, তবে পুনরায় সংশোধন না করে সমাবেশটি লোড হওয়ার সাথে সাথে পরিবর্তনগুলি দেখা যাবে।

এর অর্থ হ'ল একটি static readonlyস্ট্রিং অ-ধ্রুবক সদস্যদের ব্যবহার করতে পারে, যেমন Environment.UserNameবা DateTime.Now.ToString()। একটি constস্ট্রিং শুধুমাত্র অন্যান্য ধ্রুবক বা লিটারেল ব্যবহার সক্রিয়া করা যেতে পারে।
এছাড়াও, একটি static readonlyস্ট্যাটিক একটি স্ট্যাটিক কনস্ট্রাক্টরে সেট করা যেতে পারে; একটি constস্ট্রিং কেবল ইনলাইন করা যেতে পারে।

নোট করুন যে একটি static stringপরিবর্তন করা যেতে পারে; static readonlyপরিবর্তে আপনি ব্যবহার করা উচিত ।


25
ব্যবহারিক এবং শব্দার্থিক দৃষ্টিকোণ থেকে +1 এবং সুস্পষ্ট উপসংহার: const শুধুমাত্র ধ্রুবক জন্য ব্যবহার করা উচিত - ধ্রুবক হচ্ছে মান যে কখনো , কখনো , কখনো পরিবর্তন করুন।
— লুক

3
@LukeH কখনও কখনও কখনও শক্তিশালী হয় না। আমি কোনও খারাপের কথা ভাবতে পারি না যে যদি কেউ একটি ব্যক্তিগত স্ট্রিংকে কনস্ট হিসাবে ঘোষণা করে এবং দুটি পুনরায় সংযোগ ইভেন্টের মধ্যে পরিবর্তন করে।
— ব্রেন্ডা বেল

5
@ ব্রেন্ডা: আমি স্বীকার করব যে আমি যে private constমানগুলি, কঠোরভাবে বলছি না, ধ্রুবকগুলির জন্য ব্যবহার করি ; মূলত এটি constমাইক্রো-অপ্টিমাইজেশনের উদ্দেশ্যে অপব্যবহার করে। আমি আমার "কখনই, কখনও, কখনও" বিবৃতিটির পাশে দাঁড়াতে যাচ্ছি না , এমনকি তা আমাকে ভন্ড করে তোলে। ;)
— লুক এইচ

বিশেষত স্ট্রিংয়ের ক্ষেত্রে পারফরম্যান্স সম্পর্কে কী বলা যায়? প্রতিটি কনস্ট ব্যবহার মেমরিতে স্ট্রিংয়ের একটি নতুন অনুলিপি তৈরি করবে?
— Andrii

অ্যান্ড্রি না, ধ্রুব স্ট্রিংগুলি একবার তৈরি হয়। প্রতিটি ব্যবহারের মেমরিতে একই রেফারেন্স থাকবে।
— মিগ

43

এখানে উপকার ও বিপরীতে একটি ভাল ভাঙ্গন রয়েছে :

সুতরাং, এটি প্রদর্শিত হচ্ছে যখন মানটি পরিবর্তিত হওয়ার খুব কম সম্ভাবনা থাকে বা কোনও বাহ্যিক অ্যাপ / লিবস ধ্রুবকটি ব্যবহার না করে তখন ধ্রুবকগুলি ব্যবহার করা উচিত। রান-টাইম গণনা যখন প্রয়োজন হয় বা বাহ্যিক গ্রাহকরা যদি একটি ফ্যাক্টর হয় তখন স্ট্যাটিক পঠনযোগ্য ক্ষেত্রগুলি ব্যবহার করা উচিত।


19
নিবন্ধটি থেকে অত্যন্ত আকর্ষণীয় বিষয় - "একটি উচ্চ স্তরে, ধ্রুবকগুলি অবশ্যই সংকলন-সময়ে মোকাবেলা করা হয়, যখন স্থির পাঠ্য ক্ষেত্রগুলি রান-টাইমে মূল্যায়ন করার সময় সেট করা হয় constant সত্য যে স্থির মানগুলি সংকলক দ্বারা ব্যয় হয় মানে যে কোনও লাইব্রেরি / অ্যাসেমবিলি যা ধ্রুবক মান উল্লেখ করে তা পুনরায় সংকলন করা দরকার stat স্থির পাঠ্য ক্ষেত্রের উল্লেখ গ্রন্থাগারগুলি ক্ষেত্রটি রেফারেন্স করবে মানটি নয়, সুতরাং তারা প্রয়োজন ছাড়াই ক্ষেত্রের কোনও পরিবর্তন গ্রহণ করবে
— পুনঃসংশোধনের

1
হ্যাঁ আমি এটি পড়ি এবং একটি হু মুহুর্ত ছিল। আমি অবশ্যই তা জানতাম না।
— স্পিনন

এখানে গুগলের ক্যাশেড সংস্করণটি রয়েছে: webcache.googleusercontent.com/…
— স্পিনন

2
রেফারেন্স লিঙ্কটি আর উপলভ্য নয়।
— সালোমন জাং

সমাধান হিসাবে চিহ্নিত উত্তরটির এটি একটি দুর্দান্ত প্রশংসা। ব্যবহারের সংজ্ঞা দেওয়া খুব সহায়ক। আমার কাছ থেকে +1
— বোনজ024

11

const

public const string MyStr;

একটি সংকলন সময় ধ্রুবক (উদাহরণস্বরূপ আপনি কোনও পদ্ধতির প্যারামিটারের জন্য এটি ডিফল্ট প্যারামিটার হিসাবে ব্যবহার করতে পারেন) এবং আপনি যদি এই জাতীয় প্রযুক্তি ব্যবহার করেন তবে তা অবরুদ্ধ হবে না

static readonly

public static readonly string MyStr;

হয় রানটাইম ধ্রুবক। এর অর্থ হ'ল অ্যাপ্লিকেশন চালু হওয়ার আগে এটির মূল্যায়ন করা হয় এবং এর আগে নয়। এ কারণেই এটি কোনও পদ্ধতির (সংকলন ত্রুটি) উদাহরণস্বরূপ ডিফল্ট প্যারামিটার হিসাবে ব্যবহার করা যায় না। এতে সঞ্চিত মানটি অবরুদ্ধ হতে পারে।


6

static stringবনাম সম্পর্কে ওকিউ জিজ্ঞাসা করেছিল const। উভয়ের পৃথক ব্যবহারের কেস রয়েছে (যদিও উভয়কেই স্থির হিসাবে ধরা হয়)।

শুধুমাত্র সত্যিকারের ধ্রুবক মানগুলির জন্য কনস্ট ব্যবহার করুন (যেমন আলোর গতি - তবে এটি মাঝারি অনুসারে পরিবর্তিত হয়)। এই কঠোর গাইডলাইনটির কারণ হ'ল কনস্টের মানটি কনসেন্টগুলির ব্যবহারগুলিতে প্রতিস্থাপিত হয় যা এটি উল্লেখ করে, যার অর্থ আপনার সংস্করণ সংক্রান্ত সমস্যা থাকতে পারে কনস্টের পরিবর্তনের জায়গায় পরিবর্তিত হওয়া উচিত (অর্থাত্ এটি একটি ধ্রুবক হওয়া উচিত ছিল না) সর্বোপরি). এটি এমনকি private constক্ষেত্রগুলিকে প্রভাবিত করে নোট করুন কেননা আপনার বিভিন্ন সমাবেশ এবং বেসরকারী ক্ষেত্রগুলিতে উত্তরাধিকার সূত্রে প্রাপ্ত বেস এবং সাবক্লাস থাকতে পারে ।

স্ট্যাটিক ক্ষেত্রগুলি তাদের মধ্যে ঘোষিত ধরণের সাথে আবদ্ধ থাকে। এগুলি এমন মানগুলিকে উপস্থাপনের জন্য ব্যবহৃত হয় যা প্রদত্ত ধরণের সমস্ত দৃষ্টান্তের জন্য একই হতে হবে। এই ক্ষেত্রগুলি আপনার পছন্দ অনুযায়ী যতবার লেখা যেতে পারে (কেবলমাত্র পঠনযোগ্য নির্দিষ্ট না করে)।

যদি আপনি static readonlyবনাম বোঝাতে constচান, তবে আমি static readonlyপ্রায় সব ক্ষেত্রেই সুপারিশ করতাম কারণ এটি ভবিষ্যতের আরও প্রমাণ।


আপনি এই "ওকিউ" কার কথা বলছেন?
— পিটার মর্টেনসেন

"আসল প্রশ্ন"
— বেন অ্যাস্টন

0

আপনি static readonly stringকেবলমাত্র staticশ্রেণীর নির্মাতা বা একটি পরিবর্তনশীল প্রারম্ভিকের মান পরিবর্তন করতে পারেন, আপনি constস্ট্রিংয়ের মান কোথাও পরিবর্তন করতে পারবেন না ।


2
আমি দেখতে পাই না যে এটি বিদ্যমান উত্তরগুলি ইতিমধ্যে যা বলে তার বাইরে কীভাবে কিছু যুক্ত করে।
— ফান্ড মনিকার লসুইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.