रेंज का समर्थन करने वाले कस्टम प्रकार
अपने प्रकारों में Index और Range समर्थन जोड़ें।
रेंज का समर्थन करने वाले कस्टम प्रकार, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Index और Range का समर्थन देने के दो तरीके
आप अपने प्रकारों में Index और Range की लिखावट का समर्थन जोड़ सकते हैं। इसके दो तरीके हैं: स्पष्ट इंडेक्सर देना, या Length/Count गुणधर्म के साथ Slice विधि देना।
स्पष्ट Index इंडेक्सर
ऐसा इंडेक्सर जोड़ें जो System.Index लेता हो; इसके बाद ^ ऑपरेटर आपके प्रकार पर सीधे काम करेगा।
using System;
class Deck {
private int[] cards = { 1, 2, 3, 4, 5 };
public int this[Index i] => cards[i];
}
var d = new Deck();
Console.WriteLine(d[^1]); // 5स्पष्ट Range इंडेक्सर
.. से slicing का समर्थन देने के लिए ऐसा इंडेक्सर जोड़ें जो System.Range ले और आपके इच्छित slice प्रकार को लौटाए।
using System;
class Deck {
private int[] cards = { 1, 2, 3, 4, 5 };
public int[] this[Range r] => cards[r];
}
var d = new Deck();
Console.WriteLine(string.Join(",", d[1..3])); // 2,3Length + Slice प्रतिरूप
यदि आपके प्रकार में Count या Length गुणधर्म और Slice(int start, int length) विधि हो, तो कंपाइलर अपने-आप सीमा का समर्थन भी तैयार कर सकता है।
प्रतिरूप लागू करना
यहाँ एक स्वनिर्मित बफ़र Length और Slice उपलब्ध कराता है। कंपाइलर आपके लिए buf[1..3] को buf.Slice(1, 2) में बदल देता है।
using System;
class Buffer {
private int[] data = { 10, 20, 30, 40 };
public int Length => data.Length;
public int this[int i] => data[i];
public int[] Slice(int start, int length) {
var result = new int[length];
Array.Copy(data, start, result, 0, length);
return result;
}
}
var buf = new Buffer();
Console.WriteLine(string.Join(",", buf[1..3])); // 20,30Length का महत्व
Length (या Count) गुणधर्म ही कंपाइलर को आपके प्रकार पर ^1 जैसे अंत से गिने गए इंडेक्स निर्धारित करने देता है। इसके बिना ^ का रूपांतरण संभव नहीं है।
using System;
class Buffer {
private int[] data = { 10, 20, 30, 40 };
public int Length => data.Length;
public int this[Index i] => data[i.GetOffset(Length)];
}
var buf = new Buffer();
Console.WriteLine(buf[^1]); // 40Index को स्वयं निर्धारित करना
Index इंडेक्सर के भीतर, संभवतः अंत से गिने गए इंडेक्स को साधारण ऑफ़सेट में बदलने के लिए i.GetOffset(Length) बुलाएँ।
using System;
class Ring {
private string[] items = { "a", "b", "c" };
public int Length => items.Length;
public string this[Index i] {
get {
int offset = i.GetOffset(Length);
return items[offset];
}
}
}
var r = new Ring();
Console.WriteLine(r[^2]); // bRange को स्वयं निर्धारित करना
Range इंडेक्सर के लिए r.GetOffsetAndLength(Length) आपको कॉपी करने के लिए आरंभ और संख्या, दोनों देता है।
using System;
class Ring {
private int[] items = { 1, 2, 3, 4, 5 };
public int Length => items.Length;
public int[] this[Range r] {
get {
var (start, len) = r.GetOffsetAndLength(Length);
var slice = new int[len];
Array.Copy(items, start, slice, 0, len);
return slice;
}
}
}
var r = new Ring();
Console.WriteLine(string.Join(",", r[^3..^1])); // 3,4Count और Length की तुलना
इस प्रतिरूप में दोनों में से कोई भी नाम स्वीकार्य है: ऐरे और स्पैन Length का उपयोग करते हैं; List<T> Count का उपयोग करता है। दोनों में से कोई भी गुणधर्म कंपाइलर के लिए पर्याप्त है।
using System;
using System.Collections.Generic;
var list = new List<int> { 1, 2, 3, 4 };
// List<T> has Count, so Index works:
Console.WriteLine(list[^1]); // 4Slice के लौटाए जाने वाले प्रकारों का चयन
तय करें कि आपका Slice प्रतिलिपि लौटाएगा, जैसे ऐरे, या दृश्य लौटाएगा, जैसे स्पैन। दृश्य कम संसाधन लेते हैं, लेकिन परिवर्तनशील स्थिति साझा करते हैं, इसलिए अपने चयन का दस्तावेज़ अवश्य दें।
एक पूर्ण स्वनिर्मित प्रकार
यह Sequence स्पष्ट इंडेक्सरों और Length गुणधर्म की सहायता से ^ और .. दोनों का समर्थन करता है।
using System;
class Sequence {
private int[] data;
public Sequence(int[] d) => data = d;
public int Length => data.Length;
public int this[Index i] => data[i];
public int[] this[Range r] => data[r];
}
var s = new Sequence(new[] { 5, 10, 15, 20 });
Console.WriteLine(s[^1]); // 20
Console.WriteLine(string.Join(",", s[1..^1])); // 10,15त्वरित जाँच
पुष्टि करें कि स्वनिर्मित प्रकार पर range की लिखावट को क्या सक्षम बनाता है।
पुनरावलोकन
आपने अपने प्रकारों में Index/Range का समर्थन जोड़ने के दो तरीके सीखे।
IndexऔरRangeलेने वाले स्पष्ट इंडेक्सर।- निहित प्रतिरूप:
Count/Lengthगुणधर्म के साथSlice(int, int)। GetOffset(Length)औरGetOffsetAndLength(Length)अंत से गिनी गई स्थितियाँ निर्धारित करते हैं।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “रेंज का समर्थन करने वाले कस्टम प्रकार” पाठ निःशुल्क है?
हाँ—“रेंज का समर्थन करने वाले कस्टम प्रकार” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“रेंज का समर्थन करने वाले कस्टम प्रकार” में मैं क्या सीखूँगा?
अपने प्रकारों में Index और Range समर्थन जोड़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“रेंज का समर्थन करने वाले कस्टम प्रकार” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Index प्रकार और ^ ऑपरेटर
- Range प्रकार और .. ऑपरेटर
- ऐरे और स्ट्रिंग के साथ रेंज
- रेंज का समर्थन करने वाले कस्टम प्रकार