Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C#

C# में स्टैटिक कंस्ट्रक्टर्स का क्या उपयोग है?

स्टैटिक कंस्ट्रक्टर का उपयोग किसी भी स्टैटिक डेटा को इनिशियलाइज़ करने के लिए या किसी विशेष क्रिया को करने के लिए किया जाता है जिसे केवल एक बार करने की आवश्यकता होती है। फर्स्टइंस्टेंस बनाने या किसी स्थिर सदस्य को संदर्भित करने से पहले इसे स्वचालित रूप से बुलाया जाता है।

अप्रबंधित कोड के लिए रैपर क्लास बनाते समय स्टेटिक कंस्ट्रक्टर उपयोगी होते हैं, जब कंस्ट्रक्टर लोडलाइब्रेरी विधि को कॉल कर सकता है। स्टैटिक कंस्ट्रक्टर भी टाइप पैरामीटर पर रन-टाइम चेक को लागू करने के लिए एक सुविधाजनक स्थान है जिसे बाधाओं के माध्यम से संकलन समय पर चेक नहीं किया जा सकता है।

स्टेटिक कंस्ट्रक्टर्स में निम्नलिखित गुण होते हैं -

  • एक स्थिर कंस्ट्रक्टर एक्सेस संशोधक नहीं लेता है या उसके पास पैरामीटर नहीं होते हैं।

  • एक वर्ग या संरचना में केवल एक स्थिर कंस्ट्रक्टर हो सकता है।

  • स्टेटिक कंस्ट्रक्टर को इनहेरिट या ओवरलोड नहीं किया जा सकता है।

  • एक स्थिर निर्माता को सीधे नहीं कहा जा सकता है और इसे केवल सामान्य भाषा रनटाइम (सीएलआर) द्वारा बुलाया जाना है। इसे स्वचालित रूप से बुलाया जाता है।

  • प्रोग्राम में स्टैटिक कंस्ट्रक्टर को कब निष्पादित किया जाता है, इस पर उपयोगकर्ता का कोई नियंत्रण नहीं होता है।

  • एक स्टैटिक कंस्ट्रक्टर को क्लास को इनिशियलाइज़ करने के लिए ऑटोमेटिकली कॉल किया जाता है इससे पहले कि फर्स्ट इंस्टेंस बनाया जाए या किसी स्टैटिक मेंबर को रेफर किया जाए। एक स्टेटिक कंस्ट्रक्टर इंस्टेंस कंस्ट्रक्टर से पहले चलेगा। एक प्रकार के स्थिर कंस्ट्रक्टर को तब कहा जाता है जब किसी घटना या प्रतिनिधि को निर्दिष्ट एक स्थिर विधि लागू की जाती है और जब इसे असाइन नहीं किया जाता है। यदि स्टैटिक फील्ड वेरिएबल इनिशियलाइज़र स्टैटिक कंस्ट्रक्टर के क्लास में मौजूद हैं, तो उन्हें टेक्स्ट ऑर्डर में निष्पादित किया जाएगा, जिसमें वे स्टैटिक कंस्ट्रक्टर के निष्पादन से तुरंत पहले क्लास डिक्लेरेशन में दिखाई देते हैं।

  • यदि आप स्थैतिक क्षेत्रों को प्रारंभ करने के लिए एक स्थिर निर्माता प्रदान नहीं करते हैं, तो सभी स्थैतिक क्षेत्रों को उनके डिफ़ॉल्ट मान में प्रारंभ किया जाता है जैसा कि C#types के डिफ़ॉल्ट मानों में सूचीबद्ध है।

  • यदि कोई स्टैटिक कंस्ट्रक्टर अपवाद फेंकता है, तो रनटाइम इसे दूसरी बार नहीं बुलाएगा, और एप्लिकेशन डोमेन के जीवनकाल के लिए प्रकार अप्रारंभीकृत रहेगा जिसमें आपका प्रोग्राम चल रहा है। आमतौर पर, aTypeInitializationException अपवाद तब फेंका जाता है जब एक स्थिर कंस्ट्रक्टर किसी प्रकार को इंस्टेंट करने में असमर्थ होता है या एस्टैटिक कंस्ट्रक्टर के भीतर होने वाले एक अनचाहे अपवाद के लिए। निहित स्थिर कंस्ट्रक्टरों के लिए जो स्रोत कोड में स्पष्ट रूप से परिभाषित नहीं हैं, समस्या निवारण के लिए इंटरमीडिएट भाषा (IL) कोड के निरीक्षण की आवश्यकता हो सकती है।

  • एक स्थिर कंस्ट्रक्टर की उपस्थिति, TheBeforeFieldInit प्रकार विशेषता को जोड़ने से रोकती है। यह रनटाइम ऑप्टिमाइज़ेशन को सीमित करता है।

  • एक फ़ील्ड को केवल पढ़ने के लिए स्थिर के रूप में घोषित किया जा सकता है केवल इसकी घोषणा के भाग के रूप में या एक स्थिर निर्माता में असाइन किया जा सकता है। जब एक स्पष्ट स्टैटिक कंस्ट्रक्टर की आवश्यकता नहीं होती है, तो बेहतर रनटाइम ऑप्टिमाइज़ेशन के लिए स्टेटिक कंस्ट्रक्टर के बजाय डिक्लेरेशन पर स्टैटिक फ़ील्ड्स को इनिशियलाइज़ करें।

उदाहरण

using System;
namespace DemoApplication{
   public class Program{
      static void Main(string[] args){
         Car user = new Car();
         Car user1 = new Car();
         Console.ReadLine();
      }
   }
   public class Car{
      static Car(){
         Console.WriteLine("Static constructor called");
      }
      public Car(){
         Console.WriteLine("Default constructor called");
      }
   }
}

आउटपुट

Static constructor called
Default constructor called
Default constructor called

ऊपर के उदाहरण में हम देख सकते हैं कि स्टैटिक कंस्ट्रक्टर को केवल एक बार कॉल किया जाता है।

उदाहरण

using System;
using System.Threading;
namespace DemoApplication{
   public class Car{
      protected static readonly DateTime globalStartTime;
      protected int RouteNumber { get; set; }
      static Car(){
         globalStartTime = DateTime.Now;
         Console.WriteLine($"Static constructor called. Global start time:
         {globalStartTime.ToLongTimeString()}");
      }
      public Car(int routeNum){
         RouteNumber = routeNum;
         Console.WriteLine($"Car {RouteNumber} is created.");
      }
      public void Drive(){
         TimeSpan elapsedTime = DateTime.Now - globalStartTime;
         Console.WriteLine($"Car {this.RouteNumber} is starting its route
         {elapsedTime.Milliseconds} minutes after global start time
         {globalStartTime.ToShortTimeString()}.");
      }
   }
   class TestCar{
      static void Main(){
         Car car1 = new Car(1);
         Car car2 = new Car(2);
         car1.Drive();
         Thread.Sleep(25);
         car2.Drive();
         Console.ReadLine();
      }
   }
}

आउटपुट

Static constructor called. Global start time:
7:09:06 AM
Car 1 is created.
Car 2 is created.
Car 1 is starting its route25 minutes after global start time7:09 AM.
Car 2 is starting its route50 minutes after global start time7:09 AM.

  1. सी # स्थिर में मुख्य () विधि का उपयोग क्यों किया जाता है?

    मुख्य विधि बताती है कि निष्पादित होने पर वर्ग क्या करता है और अन्य वस्तुओं और चरों को तुरंत चालू करता है। एक मुख्य विधि स्थिर है क्योंकि यह सी # प्रोग्राम शुरू होने पर चलाने के लिए उपलब्ध है। यह कार्यक्रम का प्रवेश बिंदु है और कक्षा का एक उदाहरण बनाए बिना भी चलता है। निम्नलिखित दिखाता है कि स्थिर

  1. जावा में पैरामीट्रिज्ड कंस्ट्रक्टर का क्या उपयोग है?

    एक कंस्ट्रक्टर विधि के समान होता है और इसे क्लास का ऑब्जेक्ट बनाते समय बुलाया जाता है, इसका उपयोग आमतौर पर क्लास के इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करने के लिए किया जाता है। कंस्ट्रक्टर्स का नाम उनकी क्लास के समान होता है और उनका कोई रिटर्न टाइप नहीं होता है। दो प्रकार के कंस्ट्रक्टर पैरामीटरयुक्

  1. जावा में कंस्ट्रक्टर का क्या उपयोग है?

    एक कंस्ट्रक्टर विधि के समान होता है और इसे क्लास का ऑब्जेक्ट बनाते समय बुलाया जाता है, इसका उपयोग आमतौर पर क्लास के इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करने के लिए किया जाता है। कंस्ट्रक्टर्स का नाम उनकी क्लास के समान होता है और उनका कोई रिटर्न टाइप नहीं होता है। दो प्रकार के कंस्ट्रक्टर पैरामीटरयुक्