Wednesday, October 13, 2021

C# Variables static, non static, read-only and constant variables in Hindi


C# Variables and their types

C# प्रोग्रामिंग के अंतर्गत किसी भी क्लास के भीतर कई प्रकार के फील्ड्स होते हैं जैसे:- स्टैटिक फील्ड्स, ननस्टैटिक फील्ड्स, रीडओनली फील्ड्स और कांस्टेंट फील्ड्स। स्टैटिक फील्ड्स, रीडओनली फील्ड्स और कांस्टेंट फील्ड्स के डिक्लेरेशन के समय static, readonly और const कीवर्ड्स का प्रयोग क्रमशः उनकी पहचान के लिए किया जाता है।

हम इनके बारे में आगे के अनुच्छेदों में अध्ययन करेंगे।
नन स्टैटिक फील्ड
C# प्रोग्रामिंग लैंग्वेज के अंतर्गत नन स्टैटिक फील्ड्स ऐसे फ़ील्ड्स होते हैं जिनको डिफाइन करने के लिए केवल उनके डाटा टाइप और फील्ड का नाम देना होता है। नन स्टैटिक फील्ड को घोषित declare करते समय ही इनिशियलाइज किया जा सकता है अथवा उसे कंस्ट्रक्टर की सहायता से भी इनिशियलाइज किया जा सकता है। इसके अलावा ऑब्जेक्ट को क्रिएट करने के बाद भी इनिशियलाइज किया जा सकता है। इनिशियलाइज से अभिप्राय फिल्ड को उसके डाटा टाइप के अनुरूप वैल्यू प्रदान करने से है। 
उदाहरण के लिए
using System;
namespace Console1
{
    public class Program
    {
        int Age;
        string Name = "Ajeet";
        double Salary;
        Program()
        {
            Salary = 20000;
        }
        Program(double Salary)
        {
            this.Salary = Salary;
        }
        static void Main()
        {
            Program obj = new Program();
            Console.WriteLine(obj.Age);
            Console.WriteLine(obj.Name);
            obj.Age = 18;
            obj.Name = "Shrishesh";
            Console.WriteLine(obj.Age);
            Console.WriteLine(obj.Name);

            Program obj2 = new Program();
            obj2.Age = 36;
            obj2.Name = "Rina";
            Console.WriteLine(obj2.Age);
            Console.WriteLine(obj2.Name);
            Console.ReadKey();
        }
    }
}
स्टैटिक फील्ड
नन स्टैटिक फील्ड्स को पैरामीटराइज्ड कंस्ट्रक्टर की सहायता से भी इनिशियलाइज किया जा सकता है। इसके विपरीत, स्टैटिक फील्ड्स को पैरामीटराइज्ड कंस्ट्रक्टर की सहायता से इनिशियलाइज नहीं किया जा सकता है परन्तु स्टैटिक फील्ड्स को पैरामीटर रहित कंस्ट्रक्टर की सहायता से इनिशियलाइज किया जा सकता है। स्टैटिक फील्ड के डिक्लेरेशन के समय static कीवर्ड modifier का प्रयोग किया जाता है।
उदाहरण के लिए निम्नलिखित कोड में स्टेटिक फील्ड को इम्प्लीसिट तरीके से कंस्ट्रकटर कॉल के द्वारा इनिशियलाइज किया है।
public class Program
    {
        static int RoomNo;
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
    }
उदाहरण के लिए निम्नलिखित कोड में स्टेटिक फील्ड के डिक्लेरेशन के समय ही उसका इनिशियलाइज किया है।
  static int RoomNo=20;
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
  
उदाहरण के लिए निम्नलिखित कोड में स्टेटिक फील्ड को कंस्ट्रक्टर की सहायता से इनिशियलाइज किया गया है।
  public class Program
    {
        static int RoomNo;
        static Program()
        {
            RoomNo = 30;
        }
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
    }
निम्नलिखित कोड इनवैलिड है क्योंकि स्थैतिक कंस्ट्रक्टर  पैरामीटर रहित होना चाहिए 
उदाहरण के लिए
    public class Program
    {
        static int RoomNo;
        static Program(int room)
        {
            RoomNo = room;
        }
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
    }
नन स्टैटिक फील्ड और स्टेटिक फील्ड दोनों को पैरामीटर रहित कंस्ट्रक्टर की सहायता से इनिशियलाइज किया जा सकता है।

अलग-अलग ऑब्जेक्ट के लिए नन स्टैटिक फील्ड का मान अलग अलग हो सकता है लेकिन स्टैटिक फील्ड का मान सभी ऑब्जेक्ट्स के लिए समान होता है अर्थात स्टैटिक फील्ड का मान सभी ऑब्जेक्ट्स के द्वारा शेयर सांझा किया जाता है।

स्टैटिक फील्ड का इनिशियलाइजेशन क्लास के लाइफ साइकिल के बिल्कुल आरंभ में होता है जबकि नन स्टैटिक फील्ड का इनिशियलाइजेशन ऑब्जेक्ट क्रिएशन के दौरान होता है। क्लास के लाइफ़ साइकिल के अंतर्गत कभी भी और कितनी बार भी नन स्टैटिक फील्ड का इनिशियलाइजेशन किया जा सकता है।
रीडओनली फील्ड
C# प्रोग्रामिंग के अंतर्गत किसी भी क्लास के भीतर रीडओनली फील्ड स्टैटिक फील्ड अथवा नन स्टैटिक फील्ड  हो सकता है। रीडओनली फील्ड के साथ readonly कीवर्ड का प्रयोग फील्ड के डिक्लेरेशन के समय किया जाता है।

रीडओनली फील्ड के डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया जा सकता है अथवा कंस्ट्रक्टर की सहायता से इसका इनिशियलाइजेशन किया जा सकता है। 
उदाहरण के लिए निम्नलिखित कोड में रीडओनली फील्ड के डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया है।
    public class Program
    {
        readonly static int RoomNo=88;
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
    }
उदाहरण के लिए निम्नलिखित कोड में रीडओनली स्टेटिक फील्ड को स्टेटिक कंस्ट्रक्टर के द्वारा इनिशियलाइज किया है।
public class Program
    {
        readonly static int RoomNo;
        static Program()
        {
            RoomNo = 333;
        }
        static void Main()
        {
            Console.WriteLine("RoomNo is: "+RoomNo);
            Console.ReadKey();
        }
    }
रीडओनली फील्ड ननस्टैटिक फील्ड हो तो डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया जा सकता है अथवा ऑब्जेक्ट बनने के समय explicit कंस्ट्रक्टर कॉल के द्वारा इसका इनिशियलाइजेशन किया जा सकता है लेकिन एक बार इनिशियलाइज होने के बाद इसका दुबारा इनिशियलाइजेशन नहीं किया जा सकता है।
उदाहरण के लिए निम्नलिखित कोड में रीडओनली नन स्टेटिक फील्ड के डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया है। 
public class Program
    {
        readonly int Age=18; // non static readonly field
        
        static void Main()
        {
            Program p = new Program();

            Console.WriteLine("Age is: "+p.Age);
            Console.ReadKey();
        }
    }
उदाहरण के लिए निम्नलिखित कोड में रीडओनली नन स्टेटिक फील्ड को पैरामीटरयुक्त कंस्ट्रक्टर के द्वारा इनिशियलाइज किया है।
public class Program
    {
        readonly int Age; // non static readonly field
        public Program(int Age)
        {
            this.Age = Age;
        }
        static void Main()
        {
            Program p1 = new Program(18);
            Program p2 = new Program(20);

            Console.WriteLine("Age is: "+p1.Age);
            Console.WriteLine("Age is: "+p2.Age);
            Console.ReadKey();
        }
    }
रीडओनली फील्ड स्टैटिक फील्ड हो तो डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया जा सकता है अथवा क्लास के लाइफ के आरंभ में implicit कंस्ट्रक्टर कॉल के द्वारा इसका इनिशियलाइजेशन हो सकता है लेकिन एक बार इसका इनिशियलाइजेशन होने के बाद इसका दुबारा इनिशियलाइजेशन नहीं किया जा सकता है।

रीडओनली फील्ड यदि स्टैटिक फील्ड है तो उसका इनिशियलाइजेशन क्लास के जीवन चक्र लाइफ साइकिल के बिल्कुल आरंभ में होता है जबकि रीडओनली फील्ड यदि नन स्टैटिक फील्ड है तो उसका इनिशियलाइजेशन ऑब्जेक्ट create होने के दौरान होता है।
उदाहरण के लिए निम्नलिखित कोड में रीडओनली स्टेटिक फील्ड के डिक्लेरेशन के समय ही उसका इनिशियलाइजेशन किया है।
public class Program
    {
        readonly static DateTime date= new DateTime(2021,10,14);
        
        static void Main()
        {
            Console.WriteLine(date);
            Console.ReadKey();
        }
    }
कांस्टेंट फील्ड 
C# प्रोग्रामिंग के अंतर्गत किसी भी क्लास के भीतर कांस्टेंट फील्ड एक स्टैटिक फील्ड है जिसका इनिशियलाइजेशन कांस्टेंट फील्ड के डिक्लेरेशन के समय ही किया जाता है। कांस्टेंट फील्ड का इनिशियलाइजेशन उसके डिक्लेरेशन के समय नहीं हो तो एक्सेप्शन उत्पन्न होता है। कांस्टेंट फील्ड की पहचान const कीवर्ड से होती है। ध्यातव्य है कि यद्यपि कांस्टेंट फील्ड एक स्टैटिक फील्ड है तथापि इसके साथ static कीवर्ड का प्रयोग नहीं किया जा सकता है अन्यथा एक्सेप्शन उत्पन्न होता है।
उदाहरण के लिए निम्नलिखित कोड में कांस्टेंट फील्ड का उपयोग हुआ है।
  public class Program
    {
        const double PI = 3.1415;
        static void Main()
        {
            Console.WriteLine("Value of PI constant is "+PI.ToString());
            Console.ReadKey();
        }
    }
निम्नलिखित उदाहरण उपरोक्त चारों तरफ के फ़ील्ड्स को व्यक्त करता है
using System;
namespace VariablesType
{
    class Program
    {
        int x; // non static field
        static int y; // static field
        const int z = 200; // constant field 
        readonly int r=88; // non static readonly field
        readonly static int s=99; // static readonly field
        public Program(int r)
        {
            this.r = r;
        }
        static Program()
        {
            s = 200;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Value of variable y: "+y);
            Console.WriteLine("Value of variable z: "+z);
            Console.WriteLine("Value of variable s: "+s);
            Program p = new Program(800);
            p.x = 10;
            Console.WriteLine("Value of variable x: " + p.x);
            p.x = 15;
            Console.WriteLine("Value of variable x: " + p.x);
            y = 20;
            Console.WriteLine("Value of variable y: " + y);
            Console.WriteLine("Value of variable r: " + p.r);
            Console.ReadKey();
        }
    }
}
  

उपसंहार
१) नन स्टैटिक वेरिएबल को इंस्टेंस वेरिएबल भी कहते हैं क्योंकि नन स्टैटिक्स वेरिएबल या फील्ड का इनीशिएलाइजेशन किसी क्लास के इंस्टेंस/ऑब्जेक्ट के बनने के दौरान होता है। प्रत्येक ऑब्जेक्ट या इंस्टेंस  के बनने पर ननस्टैटिक वेरिएबल की वैल्यू को डिफाइन कर सकते हैं।
२) स्टैटिक वेरिएबल या फील्ड क्लास स्तर का फील्ड होता है क्योंकि ऐसे फील्ड को क्लास के सभी ऑब्जेक्ट्स द्वारा समान मान के साथ एक्सेस किया जाता है। स्टैटिक वेरिएबल या फील्ड का वैल्यू क्लास के जीवन चक्र के आरंभ में ही निर्धारित या डिफाइन होता है। स्टैटिक वेरिएबल या फील्ड के इनिशियलाइज के लिए ऑब्जेक्ट का निर्माण आवश्यक नहीं है। यह तो क्लास के जीवन चक्र के आरंभ में ही इनिशियलाइज हो जाता है।
३) कांस्टेंट फील्ड भी एक स्टैटिक फील्ड ही होता है क्योंकि इसके इनिशियलाइजेशन के लिए ऑब्जेक्ट का निर्माण आवश्यक नहीं है और इसका इनिशियलाइजेशन फील्ड के डिफाइन करते ही होता है। कांस्टेंट फील्ड को डिफाइन और इनिशियलाइज सदैव एक साथ ही किया जाता है।
४) रीडओनली फील्ड बिना static कीवर्ड के एक इंस्टेंस फील्ड की तरह व्यवहार करता है। अतः इसके इनिशियलाइजेशन के लिए ऑब्जेक्ट का निर्माण आवश्यक है। लेकिन रीडओनली फील्ड को ऑब्जेक्ट निर्माण के बाद पुनः इनिशियलाइज नहीं किया जा सकता है जबकि इंस्टेंस फील्ड को ऑब्जेक्ट निर्माण के बाद पुनः इनिशियलाइज किया जा सकता है।
  • Single copy and modifiable => static
  • Single copy and not modifiable => const
  • Mutiple copy and modifiable => non static
  • Multile copy and not modifiable => readonly

नवमी नवरात्रि १४ अक्टूबर २०२१

© अजीत कुमार, सर्वाधिकार सुरक्षित।

इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।

No comments:

Post a Comment

Hot Topics