ধ্রুবকটি স্থিতিশীল হিসাবে চিহ্নিত করা যায় না


96

আমি এই জাতীয় পিআই ধ্রুবক ঘোষণার চেষ্টা করছি:

public static const double PI = Math.PI;

তবে কেন আমি এই ত্রুটি পাচ্ছি?

The constant 'Calendar.NewCalendar.PI' cannot be marked static

4
সম্ভাব্য সদৃশ স্ট্যাকওভারফ্লো.com
— 66

উত্তর:


198

constবোঝায় static( constমানটি উল্লেখ করার জন্য আপনার কোনও উদাহরণের দরকার নেই )।

আমি এই গুরুত্বপূর্ণ বিষয়টিও যুক্ত করতে চাই: আপনি যখন কোনও সমাবেশের সাথে (রেফারেন্স) লিঙ্ক করেন public const, তখন সেই মানটি আপনার সমাবেশে অনুলিপি করা হয়। সুতরাং যদি constরেফারেন্সড অ্যাসেমব্লির মান পরিবর্তন হয় তবে আপনার অ্যাসেমব্লিতে এখনও মূল সংকলিত মান থাকবে।

যদি এই আচরণটি গ্রহণযোগ্য না হয় , তবে আপনার ক্ষেত্রটিকে ক্ষেত্র তৈরি করার বিষয়টি বিবেচনা করা উচিত public static readonly।

বাইনারি হিসাবে সরবরাহ করা Lib.dll:

public class Foo {
    public const int HATS = 42;
    public static readonly int GLOVES = 33;
}

App.exe, উল্লেখ Lib.dll:

Foo.HATS    // This will always be 42 even if the value in Lib.dll changes,
            // unless App.exe is recompiled.

Foo.GLOVES  // This will always be the same as Foo.GLOVES in Lib.dll

এমএসডিএন থেকে :

আপনি যে কোনও সময় পরিবর্তনের প্রত্যাশা করছেন এমন তথ্য উপস্থাপনের জন্য ধ্রুবক তৈরি করবেন না। উদাহরণস্বরূপ, কোনও পরিষেবার মূল্য, পণ্য সংস্করণ নম্বর, বা কোনও সংস্থার ব্র্যান্ড নাম সংরক্ষণের জন্য ধ্রুবক ক্ষেত্র ব্যবহার করবেন না। এই মানগুলি সময়ের সাথে সাথে পরিবর্তিত হতে পারে এবং সংকলকগুলি ধ্রুবকগুলি প্রচার করে তাই আপনার লাইব্রেরির সাথে সংকলিত অন্যান্য কোডগুলি পরিবর্তনগুলি দেখতে পুনরায় সংকলন করতে হবে।

ডটনেটপার্টস থেকে :

ডিএলএল। আপনি যখন কোনও constক্ষেত্র বা ঘোষণা ব্যবহার করেন , সি # সংকলক আসলে constআইএল কোডে ভেরিয়েবলের মান এম্বেড করে । অতএব, এটি মূলত constপৃথক সত্তা হিসাবে মুছে দেয় ।

সতর্কতা: মানগুলির পরিবর্তনের constপরে যদি প্রোগ্রামগুলির উপর নির্ভর করে যদি তাদের পুনরায় সংযুক্ত না করা constহয় তবে সেগুলি ভেঙে যেতে পারে [ কারণ তারা পূর্ববর্তী মানটি ব্যবহার করতে থাকবে ]।


15

একটি ধ্রুবক সংজ্ঞা দ্বারা স্থির হয়।


এটি কি জাবাতেও চূড়ান্ত applied প্রয়োগ করা হয়েছে
— বশির আল-মোমানি

@ বাশিরাল-মোমনি: না, কনস্ট্রাক্টরের কলের পরে একটি ফাইনালটি অপরিবর্তনীয়। বেশি কিছু না.
— জুলাইয়ের জর্জেঞ্জ

9

আপনার স্ট্যাটিক কনস্ট থাকতে পারে না। কনস্টের পরিবর্তে কেবলমাত্র পড়ার চেষ্টা করুন বা "স্থিতিশীল" বাদ দিন যেহেতু "কনস্ট" স্থিরভাবে স্থির করা হয়েছে।


4

সংকলনের সময় কোডটিতে ধ্রুবকগুলি প্রতিস্থাপন করা যায় না, রানটাইম নয়, সুতরাং স্থির বনাম উদাহরণ সংজ্ঞাগুলির জন্য কোনও প্রয়োজন নেই।


3

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

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