একটি স্ট্যাটিক কনস্ট্রাক্টর ব্যবহার করা হয় কোনো স্ট্যাটিক ডেটা আরম্ভ করার জন্য, অথবা একটি নির্দিষ্ট ক্রিয়া সম্পাদন করতে যা শুধুমাত্র একবারই করতে হবে। এটিকে স্বয়ংক্রিয়ভাবে বলা হয় প্রথম ঘটনা তৈরি হওয়ার আগে বা কোনো স্ট্যাটিক সদস্যদের উল্লেখ করা হয়।
অব্যবস্থাপিত কোডের জন্য র্যাপার ক্লাস তৈরি করার সময় স্ট্যাটিক কনস্ট্রাক্টর দরকারী, যখন কনস্ট্রাক্টর লোডলাইব্রেরি পদ্ধতিতে কল করতে পারে। স্ট্যাটিক কনস্ট্রাক্টরগুলি টাইপ প্যারামিটারে রান-টাইম চেক প্রয়োগ করার জন্য সুবিধাজনক জায়গা যা সীমাবদ্ধতার মাধ্যমে কম্পাইল টাইমে চেক করা যায় না।
স্ট্যাটিক কনস্ট্রাক্টরগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে -
-
একটি স্ট্যাটিক কনস্ট্রাক্টর অ্যাক্সেস মডিফায়ার নেয় না বা প্যারামিটার থাকে না।
-
একটি ক্লাস বা স্ট্রাকটে শুধুমাত্র একটি স্ট্যাটিক কনস্ট্রাক্টর থাকতে পারে।
-
স্ট্যাটিক কনস্ট্রাক্টর উত্তরাধিকারসূত্রে বা ওভারলোড করা যায় না।
-
একটি স্ট্যাটিক কনস্ট্রাক্টরকে সরাসরি কল করা যায় না এবং শুধুমাত্র সাধারণ ভাষা রানটাইম (সিএলআর) দ্বারা বলা হয়। এটি স্বয়ংক্রিয়ভাবে আহ্বান করা হয়৷
-
প্রোগ্রামে স্ট্যাটিক কনস্ট্রাক্টর কখন কার্যকর করা হয় তার উপর ব্যবহারকারীর কোন নিয়ন্ত্রণ নেই।
-
একটি স্ট্যাটিক কনস্ট্রাক্টরকে স্বয়ংক্রিয়ভাবে ক্লাস শুরু করার জন্য বলা হয় প্রথম উদাহরণ তৈরি হওয়ার আগে বা কোনও স্ট্যাটিক সদস্যদের উল্লেখ করার আগে। একটি স্ট্যাটিক কনস্ট্রাক্টর একটি ইনস্ট্যান্স কনস্ট্রাক্টরের আগে চলবে। একটি টাইপের স্ট্যাটিক কনস্ট্রাকটর বলা হয় যখন একটি ইভেন্ট বা প্রতিনিধিকে অ্যাসাইন করা একটি স্ট্যাটিক পদ্ধতি আহ্বান করা হয় এবং যখন এটি অ্যাসাইন করা হয় তখন নয়। যদি স্ট্যাটিক ফিল্ড ভেরিয়েবল ইনিশিয়ালাইজারগুলি স্ট্যাটিক কনস্ট্রাক্টরের ক্লাসে উপস্থিত থাকে, তবে সেগুলিকে টেক্সচুয়াল ক্রমে কার্যকর করা হবে যা স্ট্যাটিক কনস্ট্রাক্টরের কার্যকর করার অবিলম্বে ক্লাস ডিক্লেয়ারেশনে প্রদর্শিত হবে৷
-
আপনি যদি স্ট্যাটিক ক্ষেত্রগুলি শুরু করার জন্য একটি স্ট্যাটিক কনস্ট্রাক্টর প্রদান না করেন, তবে সমস্ত স্ট্যাটিকফিল্ডগুলি তাদের ডিফল্ট মান হিসাবে শুরু করা হয় যেমন C# টাইপের ডিফল্ট মানগুলিতে তালিকাভুক্ত।
-
যদি একটি স্ট্যাটিক কনস্ট্রাক্টর একটি ব্যতিক্রম ছুঁড়ে দেয়, রানটাইম এটিকে দ্বিতীয়বার আহ্বান করবে না, এবং আপনার প্রোগ্রামটি যে অ্যাপ্লিকেশন ডোমেনটি চলছে তার আজীবনের জন্য টাইপটি অপ্রচলিত থাকবে। সাধারণত, aTypeInitializationException ব্যতিক্রম নিক্ষেপ করা হয় যখন একটি স্ট্যাটিক কনস্ট্রাক্টর একটি টাইপ ইনস্ট্যান্টিয়েট করতে অক্ষম হয় বা অ্যাস্ট্যাটিক কনস্ট্রাক্টরের মধ্যে একটি আন-হ্যান্ডেল করা ব্যতিক্রমের জন্য। অন্তর্নিহিত স্ট্যাটিক কনস্ট্রাক্টরদের জন্য যা সোর্স কোডে স্পষ্টভাবে সংজ্ঞায়িত করা হয়নি, সমস্যা সমাধানের জন্য ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (IL) কোড পরিদর্শনের প্রয়োজন হতে পারে।
-
একটি স্ট্যাটিক কনস্ট্রাক্টরের উপস্থিতি TheBeforeFieldInit টাইপ অ্যাট্রিবিউট যুক্ত করাকে বাধা দেয়। এটি রানটাইম অপ্টিমাইজেশানকে সীমিত করে৷
-
স্ট্যাটিক রিডঅনলি হিসাবে ঘোষিত একটি ক্ষেত্র শুধুমাত্র তার ঘোষণার অংশ হিসাবে বা একটি স্ট্যাটিক কনস্ট্রাক্টরে বরাদ্দ করা যেতে পারে। যখন একটি স্পষ্ট স্ট্যাটিক কনস্ট্রাক্টরের প্রয়োজন হয় না, তখন আরও ভালো রানটাইম অপ্টিমাইজেশানের জন্য স্ট্যাটিক কনস্ট্রাক্টরের পরিবর্তে ঘোষণায় স্ট্যাটিক ক্ষেত্রগুলি শুরু করুন৷
উদাহরণ
ব্যবহার করে সিস্টেম;নেমস্পেস ডেমোঅ্যাপ্লিকেশন{পাবলিক ক্লাস প্রোগ্রাম{স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[]আর্গস){কার ব্যবহারকারী =নতুন গাড়ি(); গাড়ি ব্যবহারকারী1 =নতুন গাড়ি(); Console.ReadLine(); } } পাবলিক ক্লাস কার{ স্ট্যাটিক কার(){ কনসোল. রাইটেলাইন("স্ট্যাটিক কনস্ট্রাক্টর বলা হয়"); } পাবলিক কার(){ Console.WriteLine("ডিফল্ট কনস্ট্রাক্টর বলা হয়"); } } }
আউটপুট
স্ট্যাটিক কনস্ট্রাক্টরকে ডিফল্ট কনস্ট্রাক্টর বলা হয় ডিফল্ট কনস্ট্রাক্টর বলা হয়
উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে স্ট্যাটিক কনস্ট্রাক্টরকে শুধুমাত্র একবার বলা হয়।
উদাহরণ
ব্যবহার করে সিস্টেম;ব্যবহার করে সিস্টেম.থ্রেডিং;নেমস্পেস ডেমোঅ্যাপ্লিকেশন{পাবলিক ক্লাস কার{সুরক্ষিত স্ট্যাটিক রিডঅনলি ডেটটাইম গ্লোবালস্টার্টটাইম; সুরক্ষিত int RouteNumber { get; সেট } স্ট্যাটিক কার(){ globalStartTime =DateTime.Now; Console.WriteLine($"স্ট্যাটিক কনস্ট্রাক্টর বলা হয়। গ্লোবাল শুরুর সময়:{globalStartTime.ToLongTimeString()}"); } পাবলিক কার(int routeNum){ RouteNumber =routeNum; Console.WriteLine($"কার {RouteNumber} তৈরি করা হয়েছে।"); } public void Drive(){ TimeSpan elapsedTime =DateTime.Now - globalStartTime; Console.WriteLine($"কার {this.RouteNumber} তার রুট শুরু করছে বৈশ্বিক স্টার্ট টাইম {globalStartTime.ToShortTimeString()}।" এর {elapsedTime.Milliseconds} মিনিট পরে; } } ক্লাস টেস্টকার{ স্ট্যাটিক ভ্যাইড মেইন(){ কার কার1 =নতুন গাড়ি(1); গাড়ী car2 =নতুন গাড়ী(2); car1.Drive(); থ্রেড। ঘুম (25); car2.Drive(); Console.ReadLine(); } } }
আউটপুট
স্ট্যাটিক কনস্ট্রাক্টর বলা হয়। গ্লোবাল স্টার্ট টাইম:7:09:06 AMCar 1 তৈরি করা হয়েছে।Car 2 তৈরি হয়েছে।Car 1 তার রুট শুরু করছে 25 মিনিট পর গ্লোবাল স্টার্ট টাইম 7:09 AM পরে।Car 2 তার রুট শুরু করছে গ্লোবাল স্টার্ট টাইম 7:09 AM পরে 50 মিনিট পরে।প্রে>