खोज…


स्थैतिक खोजशब्द

स्थिर खोजशब्द का अर्थ 2 चीजें हैं:

  1. यह मान ऑब्जेक्ट से ऑब्जेक्ट में नहीं बदलता है, बल्कि पूरे क्लास में बदलता है
  2. स्थैतिक गुणों और विधियों को एक उदाहरण की आवश्यकता नहीं होती है।

public class Foo
{
    public Foo{
        Counter++;
        NonStaticCounter++;
    }

    public static int Counter { get; set; }
    public int NonStaticCounter { get; set; }
}

public class Program 
{
    static void Main(string[] args)
    {
        //Create an instance
        var foo1 = new Foo();
        Console.WriteLine(foo1.NonStaticCounter); //this will print "1"

        //Notice this next call doesn't access the instance but calls by the class name.
        Console.WriteLine(Foo.Counter); //this will also print "1"

        //Create a second instance
        var foo2 = new Foo();

        Console.WriteLine(foo2.NonStaticCounter); //this will print "1"

        Console.WriteLine(Foo.Counter); //this will now print "2"
        //The static property incremented on both instances and can persist for the whole class

    }
}

स्थैतिक वर्ग

"स्थिर" कीवर्ड जब किसी कक्षा का संदर्भ देता है तो उसके तीन प्रभाव होते हैं:

  1. आप एक स्थिर वर्ग का उदाहरण नहीं बना सकते हैं (यह डिफ़ॉल्ट कंस्ट्रक्टर को भी हटा देता है)
  2. कक्षा में सभी गुण और विधियाँ स्थिर होने के साथ-साथ होनी चाहिए।
  3. एक static वर्ग एक sealed वर्ग है, जिसका अर्थ है कि यह विरासत में नहीं मिल सकता है।

public static class Foo
{
    //Notice there is no constructor as this cannot be an instance
    public static int Counter { get; set; }
    public static int GetCount()
    {
        return Counter;
    }
}

public class Program 
{
    static void Main(string[] args)
    {
        Foo.Counter++;
        Console.WriteLine(Foo.GetCount()); //this will print 1
        
        //var foo1 = new Foo(); 
        //this line would break the code as the Foo class does not have a constructor
    }
}

स्थिर जीवनकाल

एक static वर्ग आलसी रूप से सदस्य पहुंच पर आरंभिक है और अनुप्रयोग डोमेन की अवधि के लिए रहता है।

void Main()
{
    Console.WriteLine("Static classes are lazily initialized");
    Console.WriteLine("The static constructor is only invoked when the class is first accessed");
    Foo.SayHi();

    Console.WriteLine("Reflecting on a type won't trigger its static .ctor");
    var barType = typeof(Bar);

    Console.WriteLine("However, you can manually trigger it with System.Runtime.CompilerServices.RuntimeHelpers");
    RuntimeHelpers.RunClassConstructor(barType.TypeHandle);
}

// Define other methods and classes here
public static class Foo
{
    static Foo()
    {
        Console.WriteLine("static Foo.ctor");
    }
    public static void SayHi()
    {
        Console.WriteLine("Foo: Hi");
    }
}
public static class Bar
{
    static Bar()
    {
        Console.WriteLine("static Bar.ctor");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow