वैल्यू प्रकार बनाम रेफ़रेंस प्रकार
देखें कि प्रत्येक को कैसे संग्रहीत और कॉपी किया जाता है।
वैल्यू प्रकार बनाम रेफ़रेंस प्रकार, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रकारों के दो परिवार
C# के प्रकार मान प्रकार (int, double, bool, स्ट्रक्चर) और संदर्भ प्रकार (वर्ग, स्ट्रिंग, सारणियाँ) में विभाजित होते हैं। वे इस बात में अलग होते हैं कि उन्हें कैसे संग्रहीत और कॉपी किया जाता है।
using System;
class Program
{
static void Main()
{
int valueType = 5; // value type
int[] referenceType = { 1, 2, 3 }; // reference type
Console.WriteLine(valueType + ", length " + referenceType.Length);
}
}मान प्रकार डेटा रखते हैं
मान-प्रकार का चर सीधे अपना डेटा रखता है। आम तौर पर ये स्टैक पर या इन्हें रखने वाले ऑब्जेक्ट के भीतर ही संग्रहीत होते हैं।
using System;
class Program
{
static void Main()
{
int a = 10;
double b = 3.14;
bool c = true;
Console.WriteLine(a + ", " + b + ", " + c);
}
}संदर्भ प्रकार एक पता रखते हैं
संदर्भ-प्रकार का चर हीप पर संग्रहीत डेटा का संदर्भ (पता) रखता है। चर और ऑब्जेक्ट अलग-अलग होते हैं।
using System;
class Box { public int Value; }
class Program
{
static void Main()
{
Box b = new Box(); // b refers to a heap object
b.Value = 42;
Console.WriteLine(b.Value);
}
}प्रति बनाने का व्यवहार: मान प्रकार
मान प्रकार को असाइन करने पर डेटा की प्रति बनती है। प्रति में बदलाव करने से original कभी प्रभावित नहीं होता।
using System;
class Program
{
static void Main()
{
int a = 1;
int b = a; // copy
b = 99;
Console.WriteLine("a=" + a + ", b=" + b);
}
}प्रतिलिपि व्यवहार: संदर्भ प्रकार
संदर्भ प्रकार को असाइन करने पर ऑब्जेक्ट की नहीं, बल्कि संदर्भ की प्रतिलिपि बनती है। इसके बाद दोनों चर उसी ऑब्जेक्ट की ओर संकेत करते हैं।
using System;
class Box { public int Value; }
class Program
{
static void Main()
{
Box a = new Box { Value = 1 };
Box b = a; // same object
b.Value = 99;
Console.WriteLine("a.Value=" + a.Value + ", b.Value=" + b.Value);
}
}स्ट्रक्चर मान प्रकार होते हैं
आपके द्वारा परिभाषित किया गया struct एक मान प्रकार होता है, इसलिए असाइन करने पर इसकी प्रतिलिपि int की तरह बनती है।
using System;
struct Point { public int X, Y; }
class Program
{
static void Main()
{
Point p1 = new Point { X = 1, Y = 2 };
Point p2 = p1; // full copy
p2.X = 99;
Console.WriteLine("p1.X=" + p1.X + ", p2.X=" + p2.X);
}
}विधियों में मान भेजना
डिफ़ॉल्ट रूप से, मान प्रकार प्रतिलिपि के रूप में भेजे जाते हैं और संदर्भ प्रकार संदर्भ की प्रतिलिपि भेजते हैं। इसलिए कोई विधि उस वर्ग के ऑब्जेक्ट को बदल सकती है जिसे कॉल करने वाला देखता है, लेकिन किसी साधारण int को नहीं।
using System;
class Counter { public int N; }
class Program
{
static void BumpInt(int x) { x++; }
static void BumpObj(Counter c) { c.N++; }
static void Main()
{
int i = 0;
BumpInt(i);
var c = new Counter();
BumpObj(c);
Console.WriteLine("i=" + i + ", c.N=" + c.N);
}
}रिक्त मान और संदर्भ प्रकार
केवल संदर्भ प्रकार ही null हो सकते हैं, जिसका अर्थ है कि कोई ऑब्जेक्ट मौजूद नहीं है। मान प्रकारों में हमेशा कोई मान होता है, जब तक कि उन्हें ? के साथ रिक्त-योग्य घोषित न किया गया हो।
using System;
class Program
{
static void Main()
{
string text = null; // reference type can be null
int? maybe = null; // nullable value type
Console.WriteLine((text == null) + ", " + (maybe == null));
}
}समानता में अंतर
मान प्रकारों के लिए == डेटा की तुलना करता है। संदर्भ प्रकारों के लिए == आमतौर पर पहचान यानी उसी ऑब्जेक्ट की तुलना करता है, जब तक कि इसे ओवरराइड न किया गया हो।
using System;
class Program
{
static void Main()
{
int a = 5, b = 5;
Console.WriteLine("ints: " + (a == b)); // True - same value
object o1 = new object();
object o2 = new object();
Console.WriteLine("objects: " + (o1 == o2)); // False - different identity
}
}पूर्वनिर्धारित मान
मान प्रकारों का डिफ़ॉल्ट मान शून्य जैसा होता है (0, false); संदर्भ प्रकारों का डिफ़ॉल्ट मान null होता है।
using System;
class Program
{
static void Main()
{
int defaultInt = default;
bool defaultBool = default;
string defaultString = default;
Console.WriteLine(defaultInt + ", " + defaultBool + ", null? " + (defaultString == null));
}
}सब बातों को जोड़कर
यह जानना कि कोई प्रकार मान प्रकार है या संदर्भ प्रकार, उसकी प्रतिलिपि बनाने के व्यवहार, रिक्त-योग्यता और विधियों द्वारा उसमें किए जा सकने वाले बदलाव का अनुमान लगाने में मदद करता है। इससे सही और त्रुटिरहित कोड लिखने में सहायता मिलती है।
using System;
struct Money { public decimal Amount; }
class Wallet { public decimal Amount; }
class Program
{
static void Main()
{
Money m1 = new Money { Amount = 10 };
Money m2 = m1; m2.Amount = 99;
Wallet w1 = new Wallet { Amount = 10 };
Wallet w2 = w1; w2.Amount = 99;
Console.WriteLine("Money copy: " + m1.Amount + " (independent)");
Console.WriteLine("Wallet ref: " + w1.Amount + " (shared)");
}
}त्वरित जाँच
मान प्रकारों और संदर्भ प्रकारों के बारे में अपनी समझ जाँचें।
पुनरावलोकन
मान प्रकार (int, double, bool, स्ट्रक्चर) डेटा को सीधे संग्रहीत करते हैं और असाइन करने पर उनकी प्रतिलिपि बनती है; संदर्भ प्रकार (वर्ग, स्ट्रिंग, सरणियाँ) हीप ऑब्जेक्ट का संदर्भ संग्रहीत करते हैं और उसी संदर्भ की प्रतिलिपि बनाते हैं। डिफ़ॉल्ट रूप से केवल संदर्भ प्रकार ही रिक्त-योग्य होते हैं, और इन दोनों परिवारों में असाइनमेंट का व्यवहार तथा समानता अलग-अलग होती है।
using System;
struct V { public int N; }
class R { public int N; }
class Program
{
static void Main()
{
V v1 = new V { N = 1 }; V v2 = v1; v2.N = 9;
R r1 = new R { N = 1 }; R r2 = r1; r2.N = 9;
Console.WriteLine(v1.N + " vs " + r1.N);
}
}एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “वैल्यू प्रकार बनाम रेफ़रेंस प्रकार” पाठ निःशुल्क है?
हाँ—“वैल्यू प्रकार बनाम रेफ़रेंस प्रकार” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“वैल्यू प्रकार बनाम रेफ़रेंस प्रकार” में मैं क्या सीखूँगा?
देखें कि प्रत्येक को कैसे संग्रहीत और कॉपी किया जाता है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“वैल्यू प्रकार बनाम रेफ़रेंस प्रकार” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- वैल्यू प्रकार बनाम रेफ़रेंस प्रकार
- बॉक्सिंग और अनबॉक्सिंग
- निहित और स्पष्ट रूपांतरण
- Convert क्लास और पार्सिंग