স্থির নির্মাতাকে কখন সি # তে ডাকা হয়?


88

আমার যখন স্ট্যাটিক কনস্ট্রাক্টর সহ ক্লাস থাকে, তখন ক্লাস যুক্ত অ্যাসেম্বলিটি প্রথম লোড হয় বা that শ্রেণীর প্রথম রেফারেন্স আঘাত হ'ল তখন কি সেই কনস্ট্রাক্টর বলে?

উত্তর:


93

যখন ক্লাসটি প্রথমবার অ্যাক্সেস করা হয়।

স্ট্যাটিক কনস্ট্রাক্টর (সি # প্রোগ্রামিং গাইড)

স্ট্যাটিক কনস্ট্রাক্টর যে কোনও স্থিতিশীল ডেটা সূচনা করতে বা কোনও নির্দিষ্ট ক্রিয়া সম্পাদন করতে ব্যবহৃত হয় যা কেবল একবার সম্পাদন করা প্রয়োজন। প্রথম দৃষ্টান্তটি তৈরি হওয়ার আগে বা কোনও স্থির সদস্যের রেফারেন্স হওয়ার আগে এটি স্বয়ংক্রিয়ভাবে বলা হয়।


6
আকর্ষণীয় যে এটিতে "প্রথম উদাহরণটি তৈরির আগে বা কোনও স্থির সদস্যের রেফারেন্স দেওয়ার আগে" বলা হয়েছে says এটি যখন ডাকা হয় তখন সেখানে কিছুটা অবকাশ থাকে ।
টিম ব্যারাস

6
@TimBarrass কারণে কিছু অন্যান্য "অব্যবহিত পূর্বে" যে আউট স্পেসিফিকেশন পালাক্রমে প্রয়োজনীয়তা "আগে" আসলে হয় - দেখুন জন স্কিট এর নিবন্ধ অন্যান্য উত্তরে রেফারেন্সড - stackoverflow.com/a/1437372/477420
আলেক্সেই Levenkov

A static constructor is used to initialize any static dataনা static initializerস্ট্যাটিক স্টাফ আরম্ভ করার জন্য ব্যবহার করা ভাল ।
ইউশা আলেয়াউব

41

সোজা ডকুমেন্টেশন সত্ত্বেও আপনি আশা করতে পারেন এটি এতটা সহজ নয়। জন স্কিটির নিবন্ধ http://csharpindepth.com/Articles/ জেনারেল / বিফারফিল্ডিনিট.এএসপিএক্স বিবরণে এই প্রশ্নের মধ্যে যায়।

সারসংক্ষেপ:

স্ট্যাটিক কনস্ট্রাক্টর that শ্রেণীর কোনও সদস্যের প্রথম রেফারেন্সের সাথে সাথেই মৃত্যুদণ্ড কার্যকর করার গ্যারান্টিযুক্ত হয় - উদাহরণস্বরূপ সৃষ্টি বা শ্রেণির নিজস্ব স্ট্যাটিক পদ্ধতি / সম্পত্তি।

দ্রষ্টব্য যে স্থির উদ্যোগী (যদি কোনও স্থির নির্মাতা না থাকে) নির্দিষ্ট ক্ষেত্রে প্রথম উল্লেখের আগে যে কোনও সময় মৃত্যুদণ্ড কার্যকর করার গ্যারান্টিযুক্ত ।


উল্লিখিত নিবন্ধটি এখন জন স্কিটির
সুধাংশু মিশ্র

"তাত্ক্ষণিক" আচরণটি বেশ প্রকট হয়ে উঠলে কেসটি প্রদর্শন করে স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / ৩২২২২62২২৮/২ অনুসরণ করে ।
আলেক্সি লেভেনকভ

4
কনসোল অ্যাপ্লিকেশনটির মূল পদ্ধতি এমনকি কার্যকর করা শুরু করার আগে আমার কাছে ঠিক তখনই স্থির কনস্ট্রাক্টরকে ডেকে আনা হয়েছিল!
হার্পডেরপিংটন

19

ক্লাসে কিছু ব্যবহারের আগে স্ট্যাটিক কনস্ট্রাক্টরকে ডাকা হয়, তবে ঠিক যখন ঘটে তখন তা বাস্তবায়ন হয়।

প্রথম স্থিতিশীল সদস্য অ্যাক্সেস করার আগে এবং প্রথম দৃষ্টান্ত তৈরি হওয়ার আগে এটি কল করার গ্যারান্টিযুক্ত। যদি ক্লাসটি কখনও ব্যবহার না করা হয় তবে স্থির নির্মাতাকে মোটেও ডাকার নিশ্চয়তা দেওয়া হয় না।


4
যখন এটি ঘটে থাকে "বাস্তবায়ন পর্যন্ত নয় " যদি প্রয়োগটি ইসিএমএ সি # স্পেস অনুসরণ করে: "একটি স্ট্যাটিক কনস্ট্রাক্টরের কার্যকরকরণ নিম্নলিখিত অ্যাপ্লিকেশন ডোমেনের মধ্যে নিম্নলিখিত ইভেন্টগুলির দ্বারা প্রথম দ্বারা ট্রিগার করা হয়: [1] একটি উদাহরণ শ্রেণি তৈরি হয় [ (বিভাগ 17.11, ecma-international.org/publications/standards/Ecma-334.htm )
লুক এইচ

4
@ লুক: "স্ট্যাটিক কনস্ট্রাক্টর মৃত্যুদন্ড কার্যকর করার সঠিক সময়টি বাস্তবায়ন নির্ভর" " ondotnet.com/pub/a/dotnet/2003/07/07/staticxtor.html
গুফা

4
@ গুফা: এটি নিবন্ধ লেখকের ব্যাখ্যা হতে পারে তবে আপনি মাইক্রোসফ্ট বা সিসিএমএপ / ইসিএমএ / আইএসও সংস্করণগুলিতে এই শব্দটি খুঁজে পাবেন না।
লুক এইচ

1

স্থায়ী পদ্ধতিটি প্যারেন্ট ক্লাস থেকে ডেকে আনা হলে স্থিতিশীল কন্সট্রাক্টরকে ডাকা হবে না, তবে এটি স্পষ্টভাবে নির্দিষ্ট করা আছে। এখানে একটি উদাহরণ বি কন্সট্রাক্টরকে বলা হয় না যদি বি.মেথোডা () বলা হয়।

static void Main(string[] args)
{
    b.methoda();
}

class a
{
    public static void methoda()
    {
        //using initialized method data
    }
}

class b : a
{
    static b()
    {
        //some initialization
    }
}    

1

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

স্ট্যাটিক কনস্ট্রাক্টরকে ইনস্ট্রাক্ট কনস্ট্রাক্টরের পরে ডাকা হয়?

স্ট্যাটিক কনস্ট্রাক্টর নন-স্ট্যাটিক কনস্ট্রাক্টরের পরে চলতে পারে। এটি কি একটি সংকলক বাগ?

(আমার জন্য উত্তরটি ছিল সিঙ্গলটনকে একটি পৃথক শ্রেণিতে স্থাপন করা বা ইনস্ট্রাক্টরের স্ট্যাটিক ডেটা ম্যানুয়ালি এটির প্রয়োজনের আগে ইন্সট্রাক্টরের হাতে আরম্ভ করা)

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