लोड हो रहा है...

रिकॉर्ड्स

C# में रिकॉर्ड्स (Records) एक आधुनिक फीचर हैं जिन्हें C# 9.0 में पेश किया गया था। इनका मुख्य उद्देश्य ऐसे डेटा टाइप्स बनाना है जो "immutable" यानी अपरिवर्तनीय हों और जिनमें "value-based equality" हो। इसका मतलब यह है कि अगर दो रिकॉर्ड्स के सभी प्रॉपर्टीज़ समान हैं, तो वे समान माने जाएंगे, चाहे वे अलग-अलग ऑब्जेक्ट्स हों। यह विशेषता उन्हें क्लासेज़ (classes) और स्ट्रक्चर्स (structs) से अलग करती है।
रिकॉर्ड्स का इस्तेमाल उन परिस्थितियों में किया जाता है जहाँ हमें डेटा का सुरक्षित प्रतिनिधित्व चाहिए, जैसे Data Transfer Objects (DTOs), Domain Driven Design (DDD) में Value Objects, या फिर Event Sourcing में स्टेट को ट्रैक करने के लिए। रिकॉर्ड्स डेवलपर को अनावश्यक बोइलरप्लेट कोड लिखने से बचाते हैं क्योंकि Equals(), GetHashCode() और ToString() जैसी मेथड्स ऑटोमैटिकली जनरेट हो जाती हैं।
इस ट्यूटोरियल में आप सीखेंगे: रिकॉर्ड्स की सिंटैक्स, क्लास और स्ट्रक्चर से इनके अंतर, एल्गोरिदम और डेटा स्ट्रक्चर्स में इनका उपयोग, तथा OOP प्रिंसिपल्स जैसे इम्यूटेबिलिटी और एन्कैप्सुलेशन में इनकी भूमिका। आप यह भी समझेंगे कि इन्हें वास्तविक प्रोजेक्ट्स में कब और कैसे लागू किया जाए, और किन कॉमन पिटफॉल्स से बचना चाहिए। रिकॉर्ड्स आधुनिक सॉफ्टवेयर आर्किटेक्चर में एक महत्वपूर्ण भूमिका निभाते हैं और विशेष रूप से बैकएंड सिस्टम्स में डेटा-केंद्रित विकास को सरल और अधिक विश्वसनीय बनाते हैं।

मूल उदाहरण

text
TEXT Code
using System;

public record व्यक्ति(string पहला_नाम, string अंतिम_नाम);

public class Program
{
public static void Main()
{
var व्यक्ति1 = new व्यक्ति("अजय", "शर्मा");
var व्यक्ति2 = new व्यक्ति("अजय", "शर्मा");
var व्यक्ति3 = new व्यक्ति("सोनिया", "गुप्ता");

Console.WriteLine(व्यक्ति1);
Console.WriteLine(व्यक्ति1 == व्यक्ति2);
Console.WriteLine(व्यक्ति1 == व्यक्ति3);
}

}

ऊपर दिए गए उदाहरण में एक साधारण रिकॉर्ड व्यक्ति बनाया गया है। रिकॉर्ड की घोषणा में primary constructor का उपयोग किया गया है, जो ऑटोमैटिकली प्रॉपर्टीज़ बनाता है। इसका फायदा यह है कि हमें मैन्युअली get/set प्रॉपर्टीज़ या Equals() और ToString() जैसी मेथड्स लिखने की ज़रूरत नहीं होती।
जब हम व्यक्ति1 और व्यक्ति2 की तुलना == ऑपरेटर से करते हैं, तो परिणाम true आता है क्योंकि रिकॉर्ड्स में तुलना वैल्यू के आधार पर होती है, न कि रेफरेंस के आधार पर। वहीं, व्यक्ति1 और व्यक्ति3 अलग-अलग हैं क्योंकि उनके प्रॉपर्टीज़ के मान अलग हैं।
Console.WriteLine(व्यक्ति1) अपने आप ToString() मेथड कॉल करता है और आउटपुट में प्रॉपर्टीज़ को दिखाता है। यह रिकॉर्ड्स की एक और ताकत है जो डिबगिंग और लॉगिंग को आसान बनाती है।
रिकॉर्ड्स डिफ़ॉल्ट रूप से immutable होते हैं। यानी एक बार मान असाइन कर दिए गए, तो उन्हें बदला नहीं जा सकता। अगर आपको मान बदलना है, तो with एक्सप्रेशन का इस्तेमाल करना चाहिए, जिससे एक नई इंस्टेंस बनती है। यह थ्रेड-सेफ़्टी और डेटा इंटेग्रिटी सुनिश्चित करता है।
इस तरह का पैटर्न विशेष रूप से उन प्रोजेक्ट्स में उपयोगी है जहाँ हमें बार-बार डेटा पास करना होता है और डेटा की वैल्यू की शुद्धता महत्वपूर्ण होती है।

व्यावहारिक उदाहरण

text
TEXT Code
using System;
using System.Collections.Generic;

public record उत्पाद(int Id, string नाम, decimal मूल्य);

public class कार्ट
{
private readonly List<उत्पाद> _उत्पादसूची = new();

public void जोड़ें(उत्पाद item)
{
if (_उत्पादसूची.Contains(item))
{
Console.WriteLine($"उत्पाद {item.नाम} पहले से मौजूद है।");
return;
}
_उत्पादसूची.Add(item);
Console.WriteLine($"उत्पाद {item.नाम} जोड़ा गया।");
}

public decimal कुलमूल्य()
{
decimal sum = 0;
foreach (var p in _उत्पादसूची)
{
sum += p.मूल्य;
}
return sum;
}

}

public class Program
{
public static void Main()
{
var laptop = new उत्पाद(1, "लैपटॉप", 55000.75m);
var mouse = new उत्पाद(2, "माउस", 799.50m);
var duplicateLaptop = new उत्पाद(1, "लैपटॉप", 55000.75m);

var cart = new कार्ट();
cart.जोड़ें(laptop);
cart.जोड़ें(mouse);
cart.जोड़ें(duplicateLaptop);

Console.WriteLine($"कुल मूल्य: {cart.कुलमूल्य()} रुपये");
}

}

रिकॉर्ड्स के साथ काम करते समय कुछ बेस्ट प्रैक्टिसेस और सामान्य गलतियों को समझना ज़रूरी है।
सबसे पहले, रिकॉर्ड्स को उन्हीं परिदृश्यों में उपयोग करें जहाँ इम्यूटेबल डेटा की आवश्यकता हो। अगर आपको म्यूटेबल ऑब्जेक्ट्स चाहिए, तो क्लास का इस्तेमाल करें। रिकॉर्ड्स को DTOs और Value Objects के लिए आदर्श माना जाता है।
एक सामान्य गलती यह है कि डेवलपर्स रिकॉर्ड में set प्रॉपर्टीज़ जोड़ देते हैं। ऐसा करने से रिकॉर्ड्स की इम्यूटेबलिटी का उद्देश्य विफल हो जाता है। इसके बजाय with एक्सप्रेशन का प्रयोग करना बेहतर है।
कलेक्शंस जैसे Dictionary या HashSet में रिकॉर्ड्स का उपयोग करते समय यह सुनिश्चित करें कि मानों को बदलने की कोशिश न करें, क्योंकि इससे हैशकोड असंगत हो सकता है और अप्रत्याशित व्यवहार हो सकता है।
डिबगिंग के लिए ToString() और Equals() बहुत उपयोगी हैं। साथ ही, यदि संवेदनशील डेटा रिकॉर्ड में संग्रहित है, तो ToString() को ओवरराइड करना न भूलें, क्योंकि यह ऑटोमैटिकली सभी प्रॉपर्टीज़ प्रिंट करता है।
परफॉर्मेंस के मामले में, रिकॉर्ड्स बड़े डेटा प्रोसेसिंग परिदृश्यों में कुशल हैं। लेकिन अनावश्यक कॉपी बनाने से बचें और with एक्सप्रेशंस का सोच-समझकर उपयोग करें। सुरक्षा दृष्टिकोण से, पासवर्ड या API keys जैसे संवेदनशील डेटा के लिए रिकॉर्ड्स का उपयोग न करें।

📊 संदर्भ तालिका

C# Element/Concept Description Usage Example
रिकॉर्ड घोषणा प्राइमरी कंस्ट्रक्टर के साथ इम्यूटेबल टाइप public record व्यक्ति(string नाम, int आयु);
वैल्यू समानता मानों की तुलना, न कि रेफरेंस की व्यक्ति1 == व्यक्ति2
with एक्सप्रेशन नई इंस्टेंस बनाना var नया = व्यक्ति1 with { आयु = 30 };
ऑटोमैटिक मेथड्स Equals, GetHashCode, ToString उपलब्ध Console.WriteLine(व्यक्ति1);
इम्यूटेबलिटी डिफ़ॉल्ट रूप से readonly प्रॉपर्टीज़ public record उत्पाद(int Id, string नाम);

सारांश और आगे के कदम:
इस ट्यूटोरियल में आपने सीखा कि रिकॉर्ड्स C# में कैसे काम करते हैं, और क्यों वे आधुनिक सॉफ्टवेयर विकास में इतने महत्वपूर्ण हैं। रिकॉर्ड्स इम्यूटेबलिटी, वैल्यू-आधारित इक्वैलिटी और ऑटो-जेनरेटेड मेथड्स जैसे फीचर्स के कारण विकास प्रक्रिया को आसान और सुरक्षित बनाते हैं।
रिकॉर्ड्स का सही उपयोग DTOs, Value Objects और Domain Driven Design में विशेष रूप से उपयोगी है। वे आर्किटेक्चर को साफ़ और मेंटेन करने योग्य बनाते हैं।
आगे के अध्ययन के लिए आप C# में Pattern Matching, Immutable Collections, और LINQ के साथ रिकॉर्ड्स का संयोजन सीख सकते हैं। साथ ही, API डिज़ाइन और asynchronous programming में रिकॉर्ड्स का प्रयोग भी एक उन्नत कदम है।
व्यावहारिक सलाह: केवल उन स्थानों पर रिकॉर्ड्स का उपयोग करें जहाँ डेटा अपरिवर्तनीय रहना चाहिए। यदि आपका ऑब्जेक्ट बदलते हुए स्टेट्स रखता है, तो क्लास का चयन करना बेहतर होगा।
रिकॉर्ड्स को गहराई से समझने के लिए आधिकारिक Microsoft डॉक्यूमेंटेशन, DDD पर किताबें और उन्नत C# आर्किटेक्चर पैटर्न्स का अध्ययन करें। यह आपके कौशल को मजबूत करेगा और आपको बड़े स्केलेबल प्रोजेक्ट्स में अधिक आत्मविश्वास देगा।

🧠 अपने ज्ञान की परीक्षा करें

शुरू करने के लिए तैयार

Test Your Knowledge

Test your understanding of this topic with practical questions.

4
प्रश्न
🎯
70%
पास करने के लिए
♾️
समय
🔄
प्रयास

📝 निर्देश

  • हर प्रश्न को ध्यान से पढ़ें
  • हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
  • आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
  • आपकी प्रगति शीर्ष पर दिखाई जाएगी