আমার ক্লাসে কেন আমি "পাবলিক স্ট্যাটিক কনস্ট্রিং এস =" স্টাফ "রাখতে পারি না?


321

আমার ক্লাসটি সংকলনের চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি:

ধ্রুবকটি 'NamespaceName.ClassName.CONST_NAME'স্থিতিশীল হিসাবে চিহ্নিত করা যায় না।

লাইনে:

public static const string CONST_NAME = "blah";

আমি জাভাতে এই সমস্ত সময় করতে পারি। আমি কি ভুল করছি? এবং কেন এটি আমাকে এটি করতে দেয় না?

উত্তর:


583

একটি constবস্তু সর্বদা হয় static


2
কনস্ট পরিবর্তনশীল স্থির করে তোলে এবং পরিবর্তন করা যায় না।
স্যামুয়েল

6
@ জিংগুই: কনস্টের অন্তর্নিহিত অর্থ স্থিতিশীল - যদি আপনার কোনও কনস্ট থাকে তবে এটি ইতিমধ্যে অচল এবং স্ট্যাটিক তাই প্রয়োজন হবে না বা নির্দিষ্ট করা যাবে না।
জন রুডি

8
@jjnguy: কেন? কেবলমাত্র পঠনযোগ্য জাভের চূড়ান্তগুলির জন্য চূড়ান্ত চেয়ে আরও নমনীয় - আপনি এটি কনস্ট্রাক্টারে যতবার পছন্দ করতে পারেন ঠিক তেমন সেট করতে পারেন, তবে অন্য কোথাও নয়। এটা খুব সহজ হতে পারে।
জন স্কিটি

67
কনসেটগুলি সময়ে কনসেটগুলি অন্তর্ভুক্ত থাকে এবং রানটাইম স্থিতিশীল টাইপ অবজেক্টে উপস্থিত হয় না। পরিসংখ্যানগুলি অন্তর্ভুক্ত নয় এবং টাইপ অবজেক্টের অভ্যন্তরে বাস করে। আমি এটি কেবল যুক্ত করেছি কারণ কেউই পার্থক্যটির কথা উল্লেখ করেনি ...

3
মৃত্যুদণ্ড কার্যকর করার সময় তারা এখনও উপস্থিত রয়েছে - উদাহরণস্বরূপ (গেটফিল্ড সহ) আপনি তাদের প্রতিবিম্ব সহ পেতে পারেন।
জন স্কিটি

98

থেকে C # এর ভাষা স্পেসিফিকেশন (পিডিএফ পৃষ্ঠা 287 - অথবা PDF এর 300 তম পৃষ্ঠা):

ধ্রুবকগুলি স্থিতিশীল সদস্য হিসাবে বিবেচিত হলেও, একটি ধ্রুবক ঘোষণার জন্য কোনও স্ট্যাটিক সংশোধক প্রয়োজন হয় না বা অনুমতিও দেয় না।



32

একটি কনস্টের সদস্যকে সংকলক স্থির হিসাবে বিবেচনা করে, পাশাপাশি ধ্রুবক মান শব্দার্থক বোঝায়, যার অর্থ ধ্রুবকের উল্লেখগুলি সদস্যের রেফারেন্সের পরিবর্তে স্থায়ী সদস্যের মান হিসাবে ব্যবহার কোডে সংকলিত হতে পারে।

অন্য কথায়, একটি কনস্ট সদস্য, যার মান 10 রয়েছে, কোডে এটি সংকলিত হতে পারে যা কনস্টের সদস্যের পরিবর্তে 10 নম্বর হিসাবে ব্যবহার করে।

এটি স্ট্যাটিক পঠনযোগ্য ক্ষেত্রের থেকে পৃথক, যা ক্ষেত্রের রেফারেন্স হিসাবে সর্বদা সংকলিত হবে।

দ্রষ্টব্য, এটি প্রাক-জেআইটি। JIT'ter খেলতে আসে, এটি উভয়কে লক্ষ্য কোডে মান হিসাবে সংকলন করতে পারে।


অত্যন্ত গুরুত্বপূর্ণ বিষয়, যে সংকলিত কোড অনুমান করে ধ্রুবক মানটি কোনও ভবিষ্যতের সংস্করণে পরিবর্তন হবে না।
পিজেট্রাইল

6

সি # এর constজাভা হিসাবে ঠিক একই জিনিস final, একেবারে সর্বদা ব্যতীত static। আমার মতে, ভেরিয়েবলের অ- ব্যবহারযোগ্য constহওয়ার জন্য এটি সত্যিই প্রয়োজনীয় নয় static, তবে আপনাকে যদি অবিচ্ছিন্নভাবে constচলকটি অ্যাক্সেস staticকরতে হয় তবে আপনি এটি করতে পারেন:

class MyClass
{    
    private const int myLowercase_Private_Const_Int = 0;
    public const int MyUppercase_Public_Const_Int = 0;

    /*        
      You can have the `private const int` lowercase 
      and the `public int` Uppercase:
    */
    public int MyLowercase_Private_Const_Int
    {
        get
        {
            return MyClass.myLowercase_Private_Const_Int;
        }
    }  

    /*
      Or you can have the `public const int` uppercase 
      and the `public int` slighly altered
      (i.e. an underscore preceding the name):
    */
    public int _MyUppercase_Public_Const_Int
    {
        get
        {
            return MyClass.MyUppercase_Public_Const_Int;
        }
    } 

    /*
      Or you can have the `public const int` uppercase 
      and get the `public int` with a 'Get' method:
    */
    public int Get_MyUppercase_Public_Const_Int()
    {
        return MyClass.MyUppercase_Public_Const_Int;
    }    
}

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

তবে, রেকর্ডটির জন্য, আমি এখনও মূর্খতা বোধ করছি।


4
আমি যতদূর বলতে পারি, জাভা finalঠিক সি # এর মতো আচরণ করে readonly, মোটেও পছন্দ constকরে না।
বেন ভয়েগট

@jjnguy সম্পাদনার জন্য ধন্যবাদ; আমি কেন জানি না যে মূল শব্দটি বেছে নিয়েছি।
মেওম্যারিটাস

6

এমএসডিএন থেকে: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

... এছাড়াও, যখন কোনও কনস্টের ক্ষেত্রটি একটি সংকলন-সময় ধ্রুবক হয় , কেবল পঠনযোগ্য ক্ষেত্রটি রানটাইম ধ্রুবকগুলির জন্য ব্যবহার করা যায় ...

সুতরাং কনস্ট্যান্ড ক্ষেত্রগুলিতে স্ট্যাটিক ব্যবহারটি সি / সি ++ তে একটি সংজ্ঞায়িত (# ডিফাইন সহ) স্ট্যাটিক করার চেষ্টা করার মতো ... যেহেতু এটি সংকলন সময়ে এর মান দিয়ে প্রতিস্থাপিত হয়েছে অবশ্যই এটি সমস্ত দৃষ্টান্তের জন্য একবার চালু করা হয়েছিল (= স্থিতিশীল) ।


2

কনস্টেট স্ট্যাটিকের সমান, আমরা ক্লাসের নাম সহ উভয় ভারেবল অ্যাক্সেস করতে পারি তবে স্টেস্টিক ভেরিয়েবলগুলি সংশোধন করা যায় এবং কনস্টিভ করতে পারে না।

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