सामान्य तौर पर, C# में सभी प्रकारों को दो मुख्य श्रेणियों में विभाजित किया जा सकता है − मूल्य प्रकार और संदर्भ प्रकार। आइए प्रत्येक प्रकार को विस्तार से देखें।
मूल्य प्रकार
मूल्य प्रकार के वेरिएबल्स सीधे अपने डेटा को समाहित करते हैं। प्रत्येक वेरिएबल की अपने डेटा की अपनी कॉपी होती है। इसलिए मूल्य प्रकार के वेरिएबल के लिए किसी अन्य ऑब्जेक्ट को संशोधित करना असंभव है।
मूल्य प्रकार निम्न में से एक हो सकता है −
- सभी संख्यात्मक प्रकार, उदा., int, float, और double
- char और bool प्रकार
- struct प्रकार या
- एन्यूमरेशन प्रकार।
एक मूल्य प्रकार केवल मान को समाहित करता है। उदाहरण के लिए, पूर्णांक प्रकार वास्तविक संख्या को समाहित करता है, न कि संख्या का पॉइंटर, जैसे संदर्भ प्रकार।
कस्टम मूल्य प्रकार बनाने के लिए, आप struct का उपयोग कर सकते हैं। उदाहरण के लिए −
public struct Point { public int X; public int Y; } var p1 = new Point();मेमोरी में, Point का एक इंस्टेंस निम्नानुसार दर्शाया गया है −

जब आप मूल्य प्रकार के वेरिएबल को दूसरे वेरिएबल को असाइन करते हैं, तो असाइनमेंट ऑपरेशन असाइन किए जा रहे मान की एक कॉपी बनाता है। उदाहरण के लिए,
Point p2 = p1;

संदर्भ प्रकार
संदर्भ प्रकार के वेरिएबल्स अपने ऑब्जेक्ट्स का संदर्भ संग्रहीत करते हैं। दो अलग-अलग वेरिएबल्स के लिए एक ही ऑब्जेक्ट का संदर्भ रखना संभव है। एक वेरिएबल द्वारा ऑब्जेक्ट में किए गए कोई भी परिवर्तन दूसरे वेरिएबल को दिखाई देते हैं।
संदर्भ प्रकार में निम्न शामिल हैं −
- String
- Class
- Array
- Delegate
- Interface
उदाहरण के लिए, आप एक क्लास बना सकते हैं, जो एक संदर्भ प्रकार है जैसे −
public class Point{ public int X; public int Y; } var p1 = new Point();
जब आप संदर्भ प्रकार के वेरिएबल को दूसरे वेरिएबल को असाइन करते हैं, तो असाइनमेंट ऑपरेशन केवल संदर्भ को कॉपी करता है, वास्तविक ऑब्जेक्ट को नहीं।
Point p2 = p1;

उदाहरण
using System; class Program{ static void Main(){ var p1 = new Point { X = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine("Value Type"); Console.WriteLine(p1.X); Console.WriteLine(p2.X); var u1 = new User { Age = 10 }; User u2 = u1; u2.Age = 20; Console.WriteLine("Reference Type"); Console.WriteLine(u1.Age); Console.WriteLine(u2.Age); } } public struct Point{ public int X; public int Y; } public class User{ public int Age { get; set; } }आउटपुट
Value Type 10 20 Reference Type 20 20