C# अकादमी · पाठ

इंडेक्सर

ऐरे-जैसे सिंटैक्स से ऑब्जेक्ट तक पहुँचें।

पाठ 4, कुल 4 में से13 चरण

इंडेक्सर, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

इंडेक्सर क्या है

एक इंडेक्सर किसी ऑब्जेक्ट को सरणी की तरह [ ] वाक्य-विन्यास से पहुँच योग्य बनाता है। इसे this[...] के साथ परिभाषित किया जाता है। संग्रह-जैसे वर्गों के लिए यह बिल्कुल उपयुक्त है।

using System;

class Week
{
    private string[] _days = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };

    public string this[int index] => _days[index];
}

class Program
{
    static void Main()
    {
        var w = new Week();
        Console.WriteLine(w[0]);
        Console.WriteLine(w[6]);
    }
}

इंडेक्सर का वाक्य-विन्यास

इंडेक्सर प्रॉपर्टी जैसा दिखता है, लेकिन इसमें this का उपयोग होता है और यह कोष्ठकों में पैरामीटर सूची लेता है। इसमें get और वैकल्पिक रूप से set होता है।

using System;

class Scores
{
    private int[] _data = new int[5];

    public int this[int i]
    {
        get { return _data[i]; }
        set { _data[i] = value; }
    }
}

class Program
{
    static void Main()
    {
        var s = new Scores();
        s[0] = 90;
        s[1] = 75;
        Console.WriteLine(s[0] + ", " + s[1]);
    }
}

इंडेक्सर के माध्यम से पढ़ना और लिखना

गेटर और सेटर दोनों होने पर आप सरणी की तरह तत्वों को मान दे और पढ़ सकते हैं, जबकि वर्ग अंतर्निहित भंडारण को नियंत्रित करता है।

using System;

class Grid
{
    private int[] _cells = new int[3];

    public int this[int i]
    {
        get => _cells[i];
        set => _cells[i] = value;
    }
}

class Program
{
    static void Main()
    {
        var g = new Grid();
        for (int i = 0; i < 3; i++) g[i] = i * 10;
        Console.WriteLine(g[0] + ", " + g[1] + ", " + g[2]);
    }
}

इंडेक्सर में सत्यापन

इंडेक्सर केवल कोड होता है, इसलिए आप अनुक्रमांक का सत्यापन कर सकते हैं और सीमा से बाहर पहुँच के लिए स्पष्ट त्रुटि उत्पन्न कर सकते हैं।

using System;

class SafeList
{
    private int[] _data = new int[3];

    public int this[int i]
    {
        get
        {
            if (i < 0 || i >= _data.Length)
                throw new IndexOutOfRangeException("Bad index: " + i);
            return _data[i];
        }
        set { _data[i] = value; }
    }
}

class Program
{
    static void Main()
    {
        var list = new SafeList();
        list[1] = 42;
        Console.WriteLine(list[1]);
    }
}

स्ट्रिंग-कुंजी वाले इंडेक्सर

इंडेक्सर के पैरामीटर केवल int तक सीमित नहीं होते। string कुंजी आपके वर्ग को शब्दकोश-जैसी खोज सुविधा में बदल देती है।

using System;
using System.Collections.Generic;

class Config
{
    private Dictionary<string, string> _map = new Dictionary<string, string>();

    public string this[string key]
    {
        get => _map.ContainsKey(key) ? _map[key] : "(none)";
        set => _map[key] = value;
    }
}

class Program
{
    static void Main()
    {
        var c = new Config();
        c["theme"] = "dark";
        Console.WriteLine(c["theme"]);
        Console.WriteLine(c["missing"]);
    }
}

अनेक पैरामीटर

इंडेक्सर एक से अधिक पैरामीटर ले सकता है, जो matrix[row, col] के रूप में पहुँच वाली मैट्रिक्स या द्वि-आयामी ग्रिड के लिए आदर्श है।

using System;

class Matrix
{
    private int[,] _data = new int[2, 2];

    public int this[int row, int col]
    {
        get => _data[row, col];
        set => _data[row, col] = value;
    }
}

class Program
{
    static void Main()
    {
        var m = new Matrix();
        m[0, 0] = 1;
        m[1, 1] = 9;
        Console.WriteLine(m[0, 0] + ", " + m[1, 1]);
    }
}

केवल-पठन वाले इंडेक्सर

केवल-पठन वाला इंडेक्सर सामने लाने के लिए सेटर हटा दें; इससे डेटा दिखता है, लेकिन बाहरी संशोधन की अनुमति नहीं मिलती।

using System;

class Fibonacci
{
    public int this[int n]
    {
        get
        {
            int a = 0, bv = 1;
            for (int i = 0; i < n; i++)
            {
                int t = a + bv;
                a = bv;
                bv = t;
            }
            return a;
        }
    }
}

class Program
{
    static void Main()
    {
        var fib = new Fibonacci();
        Console.WriteLine(fib[7]);
    }
}

इंडेक्सर और प्रॉपर्टीज़ में अंतर

प्रॉपर्टी को नाम से (obj.Name) और इंडेक्सर को कुंजी से (obj[key]) पहुँच किया जाता है। जब ऑब्जेक्ट किसी संग्रह की तरह व्यवहार करे, तब इंडेक्सर का उपयोग करें।

using System;

class Inventory
{
    private int[] _stock = new int[4];
    public int Total => _stock.Length;          // property
    public int this[int slot]                    // indexer
    {
        get => _stock[slot];
        set => _stock[slot] = value;
    }
}

class Program
{
    static void Main()
    {
        var inv = new Inventory();
        inv[2] = 15;
        Console.WriteLine("Slot 2: " + inv[2] + ", Total slots: " + inv.Total);
    }
}

अतिभारित इंडेक्सर

आप अलग-अलग पैरामीटर प्रकारों वाले कई इंडेक्सर परिभाषित कर सकते हैं और संकलक मेल खाने वाले इंडेक्सर को चुन लेता है।

using System;
using System.Collections.Generic;

class People
{
    private List<string> _names = new List<string> { "Ann", "Bob", "Cara" };

    public string this[int i] => _names[i];
    public int this[string name] => _names.IndexOf(name);
}

class Program
{
    static void Main()
    {
        var p = new People();
        Console.WriteLine(p[1]);
        Console.WriteLine(p["Cara"]);
    }
}

अनुक्रमित ऑब्जेक्ट पर पुनरावृत्ति

किसी विशेष संग्रह पर स्वाभाविक रूप से पुनरावृत्ति करने के लिए इंडेक्सर को गिनती वाली प्रॉपर्टी के साथ संयोजित करें।

using System;

class Ring
{
    private int[] _data = { 10, 20, 30 };
    public int Count => _data.Length;
    public int this[int i] => _data[i % _data.Length];
}

class Program
{
    static void Main()
    {
        var ring = new Ring();
        for (int i = 0; i < 5; i++)
            Console.Write(ring[i] + " ");
        Console.WriteLine();
    }
}

सब कुछ एक साथ

इंडेक्सर आवरण वर्गों को मूल संग्रहों जैसा अनुभव देते हैं और परिचित कोष्ठक वाक्य-विन्यास के पीछे भंडारण का विवरण छिपा देते हैं।

using System;
using System.Collections.Generic;

class Phonebook
{
    private Dictionary<string, string> _book = new Dictionary<string, string>();

    public string this[string name]
    {
        get => _book.TryGetValue(name, out var num) ? num : "unknown";
        set => _book[name] = value;
    }
}

class Program
{
    static void Main()
    {
        var pb = new Phonebook();
        pb["Alice"] = "555-1234";
        Console.WriteLine("Alice: " + pb["Alice"]);
        Console.WriteLine("Zed: " + pb["Zed"]);
    }
}

त्वरित जाँच

इंडेक्सर की अपनी समझ जाँचें।

पुनरावलोकन

एक इंडेक्सर वर्ग को सरणी-जैसी पहुँच देने के लिए this[...] का उपयोग करता है। यह get/set, किसी भी पैरामीटर प्रकार (int, स्ट्रिंग, एकाधिक), सत्यापन, अतिभारण और केवल-पठन वाले रूपों का समर्थन करता है। संग्रह-जैसे वर्गों के लिए इंडेक्सर और अलग-अलग विशेषताओं के लिए नामित प्रॉपर्टीज़ का उपयोग करें।

using System;

class Demo
{
    private int[] _v = new int[3];
    public int this[int i]
    {
        get => _v[i];
        set => _v[i] = value;
    }
}

class Program
{
    static void Main()
    {
        var d = new Demo();
        d[0] = 100;
        Console.WriteLine(d[0]);
    }
}
शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “इंडेक्सर” पाठ निःशुल्क है?

हाँ—“इंडेक्सर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“इंडेक्सर” में मैं क्या सीखूँगा?

ऐरे-जैसे सिंटैक्स से ऑब्जेक्ट तक पहुँचें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“इंडेक्सर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. स्वचालित रूप से लागू प्रॉपर्टी
  2. बैकिंग फील्ड वाली पूर्ण प्रॉपर्टी
  3. एक्सप्रेशन-बॉडी वाले सदस्य
  4. इंडेक्सर
← C# अकादमी पर वापस जाएँ