Structs: value semantics और immutability pattern
C# 6 में struct value semantics समझिए और immutable struct pattern (परिवर्तन पर copy) बनाइए।
Structs: value semantics और immutability pattern, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 3 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
स्ट्रक्चर का अवलोकन
लक्ष्य: स्ट्रक्चर का सुरक्षित उपयोग करें।
- मान-आधारित व्यवहार (असाइन करते समय कॉपी)
- C# 6 में अपरिवर्तनीय-स्ट्रक्चर pattern
- मान के रूप में बनाम ref के ज़रिए पास करना
- बॉक्सिंग पर ध्यान दें
कॉपी का व्यवहार
स्ट्रक्चर मान प्रकार होते हैं: असाइनमेंट से एक कॉपी बनती है। कॉपी बदलने से मूल मान नहीं बदलता।
using System;
// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
public int X;
public int Y;
}
public class Program
{
public static void Main(string[] args)
{
Point a = new Point();
a.X = 1; a.Y = 2;
Point b = a; // copy the value
b.X = 9; // change the copy
Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
}
}
अपरिवर्तनीय स्ट्रक्चर pattern
अपरिवर्तनीय स्ट्रक्चर को प्राथमिकता दें: readonly fields, आवश्यक स्थिति के लिए कंस्ट्रक्टर और नए मानों के लिए छोटे With सहायक।
using System;
// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
private readonly decimal _amount;
private readonly string _currency;
public decimal Amount { get { return _amount; } }
public string Currency { get { return _currency; } }
public Money(decimal amount, string currency)
{
_amount = amount;
_currency = currency ?? "USD";
}
// Copy-on-change: returns a new value with updated amount
public Money WithAmount(decimal amount)
{
return new Money(amount, _currency);
}
}
public class Program
{
public static void Main(string[] args)
{
Money m1 = new Money(10m, "USD");
Money m2 = m1.WithAmount(15m); // new value
Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
}
}
मान के रूप में बनाम ref के ज़रिए
विधियाँ डिफ़ॉल्ट रूप से एक कॉपी प्राप्त करती हैं। कॉल करने वाले के स्ट्रक्चर को बदलने के लिए ref का उपयोग करें।
using System;
public struct Counter
{
public int Value;
}
public class Program
{
static void IncrementByValue(Counter c)
{
c.Value = c.Value + 1; // changes only the local copy
}
static void IncrementByRef(ref Counter c)
{
c.Value = c.Value + 1; // changes the caller's variable
}
public static void Main(string[] args)
{
Counter a = new Counter();
IncrementByValue(a);
Console.WriteLine("After by-value: " + a.Value); // 0
IncrementByRef(ref a);
Console.WriteLine("After by-ref: " + a.Value); // 1
}
}
बॉक्सिंग की मूल बातें
बॉक्सिंग किसी स्ट्रक्चर को ऑब्जेक्ट/इंटरफ़ेस reference में कॉपी करती है। अनबॉक्सिंग एक और कॉपी बनाती है।
using System;
public interface IShow { string Show(); }
public struct Temperature : IShow
{
public int C;
public string Show() { return C + "C"; }
}
public class Program
{
public static void Main(string[] args)
{
Temperature t = new Temperature();
t.C = 25;
object boxed = t; // boxing: copy into object
Temperature copy = (Temperature)boxed; // unbox (another copy)
copy.C = 30;
Console.WriteLine("t = " + t.C); // 25
Console.WriteLine("copy = " + copy.C); // 30
}
}
स्ट्रक्चर के सुझाव
सुझाव:
- छोटे, अपरिवर्तनीय मान ऑब्जेक्ट (निर्देशांक, धन) के लिए स्ट्रक्चर का उपयोग करें।
- बड़े या अत्यधिक परिवर्तनशील स्ट्रक्चर से बचें।
- असाइन करते समय और मान के रूप में पास करते समय बनने वाली कॉपियों को याद रखें।
- ऑब्जेक्ट/इंटरफ़ेस में कास्ट करते समय बॉक्सिंग का ध्यान रखें।
स्ट्रक्चर का मान-आधारित व्यवहार
पुनरावृत्ति
पुनरावृत्ति: स्ट्रक्चर मान प्रकार होते हैं। छोटे, अपरिवर्तनीय डिज़ाइन को प्राथमिकता दें (कंस्ट्रक्टर + readonly fields + With)। समझें कि मान के रूप में बनाम ref के ज़रिए पास करना और बॉक्सिंग कॉपियों को कैसे प्रभावित करते हैं।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “Structs: value semantics और immutability pattern” पाठ निःशुल्क है?
हाँ—“Structs: value semantics और immutability pattern” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
“Structs: value semantics और immutability pattern” में मैं क्या सीखूँगा?
C# 6 में struct value semantics समझिए और immutable struct pattern (परिवर्तन पर copy) बनाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 1वाँ पाठ है।
“Structs: value semantics और immutability pattern” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Structs: value semantics और immutability pattern
- Record-जैसे types और value-based equality (पैटर्न)
- Enums और [Flags]