স্থির কীওয়ার্ড বোঝা


16

জাভা, জাভাস্ক্রিপ্ট এবং পিএইচপি দিয়ে বিকাশ করার আমার কিছু অভিজ্ঞতা আছে।

আমি মাইক্রোসফ্ট ভিজ্যুয়াল সি # 2010 ধাপে ধাপে পড়ছি যা আমি মনে করি এটি আপনাকে সি # ভাষার সাথে পরিচয় করিয়ে দেওয়ার জন্য একটি খুব ভাল বই।

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

তবে স্ট্যাটিক কীওয়ার্ডের আসল উদ্দেশ্য কী? আমি কখন স্থির পরিবর্তনশীল এবং পদ্ধতিগুলি ঘোষণা করব?


4
সি # তে স্ট্যাটিক জাভাতে স্থির হিসাবে প্রায় একই। আপনি যদি জাভাতে এটি বুঝতে পারেন তবে আপনার অবশ্যই সি #
সুপারমে

জাভা আমার প্রথম প্রোগ্রামিং ভাষা ছিল এবং আমি এই ধারণা সেখানে either.I শুধুমাত্র সময় অল্প সময়ের জন্য জাভা ব্যবহার করেছেন বুঝতে পারে না
Nistor Alexandru

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

উত্তর:


15

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

public class SomeObject
{
    //Static Field
    static int Foo = 3;

    //instance field
    private int _Foo2 = 4;

    //instance property
    public int Foo2{get{return _Foo2;}set{_Foo2 = value;}}


    //static factory method
    public static SomeObject CreateSomeObject(int fooValue)
    {
        SomeObject retVal = new SomeObject();
        retVal.Foo2 = fooValue;
        return retVal;
    }

    //Parameterless instance constructor
    public SomeObject()
    {
    }

    public static int Add(int x)
    {
        //Static methods can only deal with local variables, or fields that
        //  are also static in the class.  This one adds x to the static member foo
        return x + Foo;

        //Foo2 is not accessable here!
    }

      //Instance method
    public int AddSomething(int x)
    {
        //Add x to the property value of Foo2
        return x + this.Foo2;

        //Note that Foo *is* accessable here as 'SomeObject.Foo'
    }

}

আমি সত্যই বলতে পারি যে আমি এক্সটেনশন পদ্ধতি তৈরির (এক্সটেনশন পদ্ধতির দ্রুত টিউটোরিয়াল ) ব্যতিক্রম ব্যতীত স্থিতিশীল হিসাবে চিহ্নিত কোনও শ্রেণি ব্যবহার করি নি ।

যাইহোক, স্ট্যাটিক পদ্ধতিগুলি যেমন কারখানার প্যাটার্ন এবং সিঙ্গলটন প্যাটার্ন ব্যবহারের জন্য নির্দিষ্ট নকশার ধরণ রয়েছে , তবে মনে রাখা গুরুত্বপূর্ণ বিষয় হ'ল স্থির পদ্ধতি এবং নির্মাতারা কোনও শ্রেণির নির্দিষ্ট কোনও উদাহরণ ব্যবহার করে না (যদি না আপনি একটি পাস করেন), সাধারণত গণনা করা বা অবজেক্টের মধ্যে তুলনা করা। আপনি যে "প্রধান" পদ্ধতিটি উল্লেখ করছেন তা সর্বদা স্থিতিশীল, তবে এটি অন্য দৃষ্টিকোণ থেকে দেখার জন্য এই নিবন্ধটি দেখুন

এটি অনুসরণ করতে, এখানে স্থিতিশীল এবং তাত্ক্ষণিক পদ্ধতি, ক্ষেত্র এবং বৈশিষ্ট্যের মধ্যে পার্থক্যটিকে বলা হয়।

public static void Main(string[] args)
{
    //This is a static method that starts a thread in an application
    // space.  At this point not everything actually has to be static...

    //Here is an instantiation with a parameterless contruction
    SomeObject obj = new SomeObject();

    //Here is an instantiation using a static factory method
    SomeObject obj2 = SomeObject.CreateSomeObject(3);

    //Getting field value from static field
    // Notice that this references the class name, not an instance
    int fooValue1 = SomeObject.Foo;

    //Getting property value from instance
    //  Note that this references an object instance
    int fooValue2 = obj2.Foo2;

    //Instance method must be called through an object
    obj2.AddSomething(4);  //if default constructor, would return 8

    //Static methods must be called through class name
    SomeObject.Add(4); //Returns 7
}

এছাড়াও, স্ট্যাটিক ক্লাসে আরও গভীর নজর দেওয়ার জন্য এই পোস্টটি দেখুন।


18

এখানে জোশুয়া ব্লচের ব্যাখ্যা দেওয়ার উপায়, যা তিনি যা বলছেন তার বেশিরভাগের মতো আমি উজ্জ্বল মনে করি (হ্যাঁ আমি জোশুয়া ব্লচের ভক্ত বালক :))। এটি স্মৃতি থেকে উদ্ধৃত করা হয়।

কল্পনা করুন যে কোনও শ্রেণি একটি বাড়ির জন্য নীল প্রিন্টের সমতুল্য। তারপরে কল্পনা করুন যে কোনও বাড়ি ক্লাসের উদাহরণ হিসাবে নীল প্রিন্টে রয়েছে। আপনি এটি থেকে একটি বর্গ (নীল-মুদ্রণ) এবং একাধিক উদাহরণ (ঘর) তৈরি করতে পারেন।

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

তবে আপনার কিছু আচরণ থাকতে পারে যা সরাসরি নীল-প্রিন্টের জন্য প্রযোজ্য এবং আপনি যে নীল প্রিন্ট থেকে সরাসরি / নীল প্রিন্টের বাইরে কোনও আসল ঘর তৈরি করার প্রয়োজন ছাড়াই ব্যবহার করতে পারবেন। কল্পনা করুন যে আপনার নীল-প্রিন্টে একটি বোতাম রয়েছে যা টিপে চাপলে, সেই নীল প্রিন্টে থাকা বাড়ির পায়ের ছাপ প্রদর্শিত হবে (দেওয়ালের সমস্ত দৈর্ঘ্য এবং এই জাতীয় গণনা করে)। স্পষ্টতই আপনি প্রথমে একটি ঘর তৈরি করতে পারেন, তারপরে তার পদচিহ্নগুলি পরিমাপ করতে পারেন তবে আপনি কেবল নীল-প্রিন্ট দিয়ে এটি করতে পারেন, তাই এই আচরণটি নীল-প্রিন্টে প্রয়োগ করা আরও সহায়ক হবে। ঘরের পদচিহ্ন গণনা করে এমন একটি নীল-প্রিন্ট এম্বেডেড বোতামটি কোনও শ্রেণিতে স্থির ফাংশন থাকার সমতুল্য।


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

12

এভাবে তাকানো আমাকে সহায়তা করে:

  • প্রতিটি ধরণের একটি স্থির উদাহরণ রয়েছে।
  • স্থির উদাহরণটি প্রথমবার আপনি টাইপ অ্যাক্সেস করার সময় তৈরি করা হয় - হয় স্থির উদাহরণের মাধ্যমে বা অন্য কোনও উদাহরণ তৈরি করে।
  • আপনি নিজের পছন্দ মতো অনেকগুলি স্থিতিশীল উদাহরণ তৈরি করতে পারেন, তবে কেবল একটি স্থির উদাহরণ রয়েছে।
  • স্ট্যাটিক হিসাবে ঘোষিত শ্রেণীর মধ্যে যে কোনও কিছু স্থির দৃষ্টান্তের সাথে সম্পর্কিত এবং এর ফলে আপনার তৈরি করা অন্য কোনও দৃষ্টান্তের অ্যাক্সেস নেই। তবে অন্যান্য দৃষ্টান্তগুলির স্থির উদাহরণটিতে অ্যাক্সেস রয়েছে।
  • যদি কোনও শ্রেণি স্থির হিসাবে ঘোষিত হয় তবে আপনি অন্যান্য দৃষ্টান্ত তৈরি করতে পারবেন না, কেবল স্থির দৃষ্টান্তটিই থাকতে পারে।
  • আপনি স্ট্যাটিক দৃষ্টান্তের জন্য স্ট্যাটিক কনস্ট্রাক্টরকে সাধারণ উদাহরণের জন্য কনস্ট্রাক্টরের মতো ঘোষণা করতে পারেন (তবে এটি স্থির ঘোষণা করে)।

স্থির কীওয়ার্ডটি কখন ব্যবহার করবেন:

  • স্থানীয় সম্পত্তিগুলিতে অ্যাক্সেসের প্রয়োজন নেই এমন কোনও পদ্ধতি এবং সম্ভবত স্থির হিসাবে ঘোষণা করা উচিত।
  • সহায়ক শ্রেণীরগুলিতে যে কোনও রাজ্য নেই (যা যাইহোক বিরল হওয়া উচিত) এবং যেগুলি কখনই উপহাস করা হবে না তা স্থির হিসাবে ঘোষণা করা যেতে পারে। তাদের উচিত অন্য বিষয় কিনা; এই কার্যকারিতা অল্প পরিমাণে ব্যবহার করুন।
  • শ্রেণীর সমস্ত দৃষ্টান্তগুলির দ্বারা অ্যাক্সেস করতে হবে এমন বৈশিষ্ট্য এবং ক্ষেত্রগুলি অবশ্যই স্থির ঘোষণা করতে হবে। তবে এটি তখনই ব্যবহার করুন যখন অন্য কোনও বিকল্প নেই।

+1, একটি ভাল সংক্ষিপ্তসার জন্য, আমি জানতাম না যে প্রতিটি ধরণের 1 টি স্থির উদাহরণ রয়েছে এবং আমি আপনাকে সত্য বলতে অবাক লাগে।
NoChance

2
@ এমদাদ কারিম এটি কেবল একটি মানসিক মডেল পিডিআর ব্যবহার করে, কারণ "Looking at it this way helps"তাঁর। আপনি এটি অদ্ভুত বলে মনে করেন কারণ এটি ঠিক সত্য নয়, তবে আপনি যদি চান তবে এটি এটির মতো ভাবতে পারেন। আপনি বোহর মডেল জানেন? এটি একটি নিয়ম এবং ধারণাগুলির একটি সেট উপস্থাপন করে যা কীভাবে পরমাণু এবং ইলেকট্রনগুলি একে অপরের সাথে যোগাযোগ করে। মডেল তোমরা যা কর তার উপর নির্ভর করে কাজ করে, কিন্তু এটা বাস্তবতা নয়।
ফ্যান্ট0 মি

@ ফ্যান্ট0 মিঃ, ব্যাখ্যার জন্য ধন্যবাদ, আমি এই ধারণার মধ্যে ছিলাম যে এটি সত্যিকারের কোনও মডেল নয় এবং এর কারণে আমি অবাক হয়েছিলাম।
NoChance

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

@ অ্যালান: যুক্তিযুক্তভাবে, আপনি যদি এমন ক্লাসে এমন কোনও সার্বজনীন পদ্ধতি কল করছেন যা class শ্রেণির উদাহরণের অবস্থাটিকে প্রভাবিত করে না, ক্লায়েন্ট বিকাশকারীকে এটি পরিষ্কার করার জন্য এটি স্থির হওয়া উচিত। যদি সেই পদ্ধতিটি এতটা করে যে এটির জন্য মশকরা প্রয়োজন, তবে এটি একটি ভিন্ন সমস্যা যা বিভিন্ন উপায়ে সমাধান করা যায়।
পিডিআর

4

সরল ব্যাখ্যা --- স্থিতিক => পরিবেশের জন্য কেবল একটি অনুলিপি উপস্থিত থাকবে।

সুতরাং কোনও ভিএম বা সিএলআর-এর মধ্যে কেবল স্থির শ্রেণীর একটি অনুলিপি থাকবে এবং অন্য যে কোনও শ্রেণীর রেফারেন্সিংয়ের ক্ষেত্রে এটির রেফারেন্সিং সহ অন্যান্য পদ্ধতিগুলির সাথে তার পদ্ধতি এবং ডেটা ভাগ করতে হবে।

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


2

স্ট্যাটিক সদস্যরা ক্লাসের সাথে জড়িত, কোনও শ্রেণির উদাহরণের সাথে নয়।

যেহেতু আমরা। নেট সম্পর্কে কথা বলছি, স্ট্রিং ক্লাসটি বিবেচনা করুন , বিশেষত স্প্লিট এবং যোগদানের পদ্ধতিগুলি।

স্প্লিট একটি উদাহরণ পদ্ধতি। একটি স্ট্রিং ভেরিয়েবল তৈরি করুন, এটিকে একটি মান দিন এবং আপনি সেই পরিবর্তনশীল / মানটিতে স্প্লিট () কল করতে পারেন এবং "বিট" এর অ্যারে ফিরে পেতে পারেন:

String s1 = "abc,def,ghi" ; 
String[] array2 = s1.Split( ',' ) ; 

সুতরাং, উদাহরণস্বরূপ পদ্ধতিগুলির জন্য, প্রদত্ত শ্রেণীর উদাহরণের মধ্যে রাখা মানটি গুরুত্বপূর্ণ

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

String[] array3 = { ... } 
s1 = String.Join( array3, "," ) ; 

অন্য বিকল্প হতে পারে একটি উদাহরণের সাথে যোগদানের পদ্ধতি থাকতে পারে , যেখানে স্ট্রিং [শ্রেণীর উদাহরণ] এর মধ্যে রাখা মান আমাদের যোগদানকারী ডিলিমেটার হিসাবে ব্যবহার করে, এরকম কিছু:

// Maybe one day ... 
String s4 = "," ; 
s1 = s4.Join( array3 ) ; 

2

কী- staticওয়ার্ডটি newbies উপলব্ধি করতে কিছুটা কঠিন হতে পারে। এর প্রাথমিক উদ্দেশ্যটি কোনও শ্রেণীর সদস্যকে শ্রেণীর কোনও একক উদাহরণের সাথে সম্পর্কিত নয়, বরং ক্লাসের নিজস্ব হিসাবে চিহ্নিত করা।

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

এই জাতীয় আচরণ সি এবং সি ++ এ "গ্লোবাল" ফাংশন বা ভেরিয়েবল আকারে উপলব্ধ ছিল যা কোনও বস্তুতে আবদ্ধ ছিল না। সুতরাং, আপোস হিসাবে, সি # এবং জাভা "স্থিতিশীল সুযোগ" সমর্থন করে, কোনও প্যারেন্ট অবজেক্ট এবং সীমিত সুযোগের সদস্যদের সহ সত্যিকারের গ্লোবাল কোডের অর্ধেক পয়েন্ট।

staticপ্রোগ্রামের main()ফাংশনের প্রথম লাইন হিসাবে ঘোষিত যে কোনও "কোড সদস্য" (ফাংশন, সম্পত্তি, ক্ষেত্র) স্কোপে আসে এবং main()ফাংশনটি শেষ না হওয়া পর্যন্ত এটিকে ছেড়ে যায় না । সরল ইংরেজিতে, একটি স্থির সদস্য উপস্থিত থাকে এবং যতক্ষণ না প্রোগ্রামটি চলছে ততক্ষণ ব্যবহার করা যেতে পারে। তদুপরি, স্থিতিশীল সদস্যদের তাদেরকে সেই ধরণের নিজস্ব সদস্য হিসাবে ডেকে আহ্বান জানানো হয়, সেই ধরণের কোনও এক উদাহরণের সদস্য নয়:

public class Foo
{
   public int MyInt {get;set;} //this is an "instance member"
   public static int MyStaticInt {get;set;} //this is a "static member"
}

...

var myFoo = new Foo();
myFoo.MyInt = 5; //valid
myFoo.MyStaticInt = 5; //invalid; MyStaticInt doesn't belong to any one Foo

Foo.MyInt = 5; //invalid; MyInt only has meaning in the context of an instance
Foo.MyStaticInt = 2; //valid

এটি স্ট্যাটিক সদস্যদের যে কোনও কোডের কাছে প্রকারের জ্ঞান রয়েছে এমন দৃশ্যমান করে তোলে, এর কোনও একক উদাহরণ সম্পর্কে তারা জানেন কি না।

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

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

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