আমার যখন স্ট্যাটিক কনস্ট্রাক্টর সহ ক্লাস থাকে, তখন ক্লাস যুক্ত অ্যাসেম্বলিটি প্রথম লোড হয় বা that শ্রেণীর প্রথম রেফারেন্স আঘাত হ'ল তখন কি সেই কনস্ট্রাক্টর বলে?
উত্তর:
যখন ক্লাসটি প্রথমবার অ্যাক্সেস করা হয়।
স্ট্যাটিক কনস্ট্রাক্টর (সি # প্রোগ্রামিং গাইড)
স্ট্যাটিক কনস্ট্রাক্টর যে কোনও স্থিতিশীল ডেটা সূচনা করতে বা কোনও নির্দিষ্ট ক্রিয়া সম্পাদন করতে ব্যবহৃত হয় যা কেবল একবার সম্পাদন করা প্রয়োজন। প্রথম দৃষ্টান্তটি তৈরি হওয়ার আগে বা কোনও স্থির সদস্যের রেফারেন্স হওয়ার আগে এটি স্বয়ংক্রিয়ভাবে বলা হয়।
A static constructor is used to initialize any static data
না static initializer
স্ট্যাটিক স্টাফ আরম্ভ করার জন্য ব্যবহার করা ভাল ।
সোজা ডকুমেন্টেশন সত্ত্বেও আপনি আশা করতে পারেন এটি এতটা সহজ নয়। জন স্কিটির নিবন্ধ http://csharpindepth.com/Articles/ জেনারেল / বিফারফিল্ডিনিট.এএসপিএক্স বিবরণে এই প্রশ্নের মধ্যে যায়।
সারসংক্ষেপ:
স্ট্যাটিক কনস্ট্রাক্টর that শ্রেণীর কোনও সদস্যের প্রথম রেফারেন্সের সাথে সাথেই মৃত্যুদণ্ড কার্যকর করার গ্যারান্টিযুক্ত হয় - উদাহরণস্বরূপ সৃষ্টি বা শ্রেণির নিজস্ব স্ট্যাটিক পদ্ধতি / সম্পত্তি।
দ্রষ্টব্য যে স্থির উদ্যোগী (যদি কোনও স্থির নির্মাতা না থাকে) নির্দিষ্ট ক্ষেত্রে প্রথম উল্লেখের আগে যে কোনও সময় মৃত্যুদণ্ড কার্যকর করার গ্যারান্টিযুক্ত ।
ক্লাসে কিছু ব্যবহারের আগে স্ট্যাটিক কনস্ট্রাক্টরকে ডাকা হয়, তবে ঠিক যখন ঘটে তখন তা বাস্তবায়ন হয়।
প্রথম স্থিতিশীল সদস্য অ্যাক্সেস করার আগে এবং প্রথম দৃষ্টান্ত তৈরি হওয়ার আগে এটি কল করার গ্যারান্টিযুক্ত। যদি ক্লাসটি কখনও ব্যবহার না করা হয় তবে স্থির নির্মাতাকে মোটেও ডাকার নিশ্চয়তা দেওয়া হয় না।
স্থায়ী পদ্ধতিটি প্যারেন্ট ক্লাস থেকে ডেকে আনা হলে স্থিতিশীল কন্সট্রাক্টরকে ডাকা হবে না, তবে এটি স্পষ্টভাবে নির্দিষ্ট করা আছে। এখানে একটি উদাহরণ বি কন্সট্রাক্টরকে বলা হয় না যদি বি.মেথোডা () বলা হয়।
static void Main(string[] args)
{
b.methoda();
}
class a
{
public static void methoda()
{
//using initialized method data
}
}
class b : a
{
static b()
{
//some initialization
}
}
স্থির কন্সট্রাক্টরগুলির সাথে একটি গ্যাচা রয়েছে বলে মনে হচ্ছে যা অন্য কোথাও জবাব দেওয়া হয়েছে তবে একটি সাধারণ ব্যাখ্যায় ডাইজেস্ট করার জন্য কিছুটা সময় নিয়েছিল। সমস্ত দস্তাবেজ এবং ব্যাখ্যা দাবি করে যে প্রথম শ্রেণিটি তাত্ক্ষণিকভাবে চালিত হওয়ার আগে বা প্রথম স্ট্যাটিক ক্ষেত্রটি রেফারেন্স হওয়ার আগে স্ট্যাটিক কনস্ট্রাক্টর / ইনটালাইজারদের "গ্যারান্টিযুক্ত" করা হয়। গোষ্ঠাটি তখন আসে যখন আপনি ক্লাসে একটি স্ট্যাটিক সিঙ্গলটন রাখার চেষ্টা করেন যা নিজের একটি উদাহরণ তৈরি করে (মুরগী / ডিম)। এক্ষেত্রে স্থিতিশীল কনস্ট্রাক্টরকে কনস্ট্যান্ট কনস্ট্রাক্টরের পরে ডাকা হয়ে যায় - এবং আমার ক্ষেত্রে ইনস্ট্যান্স কনস্ট্রাক্টর কোডটি ধারণ করে যা কিছু স্থির তথ্যের উপর নির্ভর করে।
স্ট্যাটিক কনস্ট্রাক্টরকে ইনস্ট্রাক্ট কনস্ট্রাক্টরের পরে ডাকা হয়?
স্ট্যাটিক কনস্ট্রাক্টর নন-স্ট্যাটিক কনস্ট্রাক্টরের পরে চলতে পারে। এটি কি একটি সংকলক বাগ?
(আমার জন্য উত্তরটি ছিল সিঙ্গলটনকে একটি পৃথক শ্রেণিতে স্থাপন করা বা ইনস্ট্রাক্টরের স্ট্যাটিক ডেটা ম্যানুয়ালি এটির প্রয়োজনের আগে ইন্সট্রাক্টরের হাতে আরম্ভ করা)