डेटा टाइप संदर्भ
C# में डेटा टाइप संदर्भ (Data Type Reference) प्रोग्रामिंग की नींव है, जो यह निर्धारित करता है कि डेटा को मेमोरी में कैसे स्टोर किया जाए, उस पर कौन-कौन से ऑपरेशन लागू होंगे, और रनटाइम के दौरान डेटा की अखंडता कैसे सुरक्षित रहेगी। C# में मुख्य रूप से दो प्रकार के डेटा टाइप होते हैं: वैल्यू टाइप (Value Types) जैसे int, double, bool और रेफरेंस टाइप (Reference Types) जैसे string, arrays और collections। डेटा टाइप संदर्भ को समझना आवश्यक है क्योंकि यह एप्लिकेशन की परफॉर्मेंस, मेमोरी प्रबंधन और कोड की सुरक्षा पर सीधे प्रभाव डालता है।
डेवलपमेंट में डेटा टाइप संदर्भ का उपयोग तब किया जाता है जब हमें वैरिएबल्स की घोषणा करनी होती है, एल्गोरिदम लागू करने होते हैं, डेटा स्ट्रक्चर प्रबंधित करने होते हैं, और ऑब्जेक्ट-ओरिएंटेड प्रिंसिपल्स (OOP) जैसे इनकैप्सुलेशन, इनहेरिटेंस और पॉलीमॉर्फिज़्म को लागू करना होता है। इस संदर्भ में पाठक सीखेंगे कि वैल्यू और रेफरेंस टाइप्स का सही उपयोग कैसे करें, जेनरिक collections और nullable टाइप्स का प्रबंधन कैसे करें, और C# में मेमोरी दक्षता के लिए बेहतरीन प्रैक्टिसेज क्या हैं। यह ज्ञान विशेष रूप से बड़े सॉफ़्टवेयर सिस्टम और एंटरप्राइज लेवल एप्लिकेशन आर्किटेक्चर के लिए आवश्यक है।
मूल उदाहरण
textusing System;
using System.Collections.Generic;
namespace DataTypeReferenceExample
{
class Program
{
static void Main(string\[] args)
{
// वैल्यू टाइप्स
int संख्या = 42;
double मूल्य = 99.99;
bool सक्रिय = true;
// रेफरेंस टाइप्स
string नाम = "C# डेवलपर";
int[] अंक = new int[] { 85, 90, 95 };
List<string> कौशल = new List<string> { "OOP", "LINQ", "Async" };
// Nullable टाइप
int? nullableसंख्या = null;
// आउटपुट
Console.WriteLine($"संख्या: {संख्या}, मूल्य: {मूल्य}, सक्रिय: {सक्रिय}");
Console.WriteLine($"नाम: {नाम}");
Console.WriteLine("अंक: " + string.Join(", ", अंक));
Console.WriteLine("कौशल: " + string.Join(", ", कौशल));
Console.WriteLine($"Nullable मान: {nullableसंख्या?.ToString() ?? "कोई मान नहीं"}");
}
}
}
इस उदाहरण में हमने वैल्यू टाइप्स (int, double, bool) और रेफरेंस टाइप्स (string, arrays, List) के बीच अंतर दिखाया है। वैल्यू टाइप्स स्टैक में स्टोर होते हैं और कॉपी किए जाते हैं, जबकि रेफरेंस टाइप्स हीप में स्टोर होते हैं और उनकी reference को manage किया जाता है। Nullable टाइप्स (int?) ऐसे मामलों में उपयोगी हैं जहां मान मौजूद नहीं हो सकता, जैसे डेटाबेस कॉल या API प्रतिक्रिया। List
व्यावहारिक उदाहरण
textusing System;
using System.Collections.Generic;
namespace DataTypeReferencePractical
{
class कर्मचारी
{
public string नाम { get; set; }
public int आयु { get; set; }
public decimal वेतन { get; set; }
}
class Program
{
static void Main()
{
List<कर्मचारी> कर्मचारीसूची = new List<कर्मचारी>
{
new कर्मचारी { नाम = "अलिस", आयु = 30, वेतन = 60000 },
new कर्मचारी { नाम = "बॉब", आयु = 45, वेतन = 80000 },
new कर्मचारी { नाम = "चार्ली", आयु = 25, वेतन = 50000 }
};
// वेतन के अनुसार सॉर्टिंग
कर्मचारीसूची.Sort((k1, k2) => k1.वेतन.CompareTo(k2.वेतन));
foreach (var k in कर्मचारीसूची)
{
Console.WriteLine($"नाम: {k.नाम}, आयु: {k.आयु}, वेतन: {k.वेतन:C}");
}
}
}
}
Advanced C# Implementation
textusing System;
using System.Collections.Generic;
using System.Linq;
namespace DataTypeReferenceAdvanced
{
class कर्मचारी
{
public string नाम { get; set; }
public int आयु { get; set; }
public decimal वेतन { get; set; }
public कर्मचारी(string नाम, int आयु, decimal वेतन)
{
this.नाम = नाम;
this.आयु = आयु;
this.वेतन = वेतन;
}
}
class Program
{
static void Main()
{
List<कर्मचारी> कर्मचारीसूची = new List<कर्मचारी>
{
new कर्मचारी("अलिस", 30, 60000),
new कर्मचारी("बॉब", 45, 80000),
new कर्मचारी("चार्ली", 25, 50000),
new कर्मचारी("डायने", 35, 70000)
};
try
{
var उच्चवेतन = कर्मचारीसूची.Where(k => k.वेतन > 60000)
.OrderByDescending(k => k.वेतन)
.ToList();
foreach (var k in उच्चवेतन)
{
Console.WriteLine($"उच्च वेतन: {k.नाम}, वेतन: {k.वेतन:C}");
}
}
catch (Exception ex)
{
Console.WriteLine($"त्रुटि: {ex.Message}");
}
}
}
}
डेटा टाइप संदर्भ के लिए C# की बेहतरीन प्रैक्टिसेज में सही टाइप का चयन, मेमोरी दक्षता, और maintainable कोड लिखना शामिल है। वैल्यू टाइप्स छोटे और immutable डेटा के लिए उपयुक्त हैं, जबकि रेफरेंस टाइप्स जटिल ऑब्जेक्ट्स और डेटा शेयरिंग के लिए। Nullable टाइप्स, LINQ और जेनरिक कलेक्शंस का सही उपयोग सुरक्षा और प्रदर्शन दोनों बढ़ाता है। प्रदर्शन सुधार के लिए struct का चयन, लूप्स में ऑब्जेक्ट्स की न्यूनतम क्रिएशन और उचित कलेक्शन का उपयोग (List vs Dictionary) महत्वपूर्ण है। सुरक्षा में इनपुट वेलिडेशन और संवेदनशील डेटा की सुरक्षा शामिल है। इन प्रैक्टिसेज का पालन करने से स्थिर, कुशल और maintainable C# एप्लिकेशन बनती हैं।
📊 संपूर्ण संदर्भ
C# Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
int | 32-बिट पूर्णांक | int x = 10; | int संख्या = 100; | मानक वैल्यू टाइप |
double | डबल प्रिसिजन | double d = 3.14; | double pi = 3.14159; | उच्च सटीकता |
bool | बूलियन | bool flag = true; | bool सक्रिय = false; | true/false |
char | एकल अक्षर | char c = 'A'; | char नोट = 'B'; | एक अक्षर |
string | स्ट्रिंग | string s = "Text"; | string नाम = "अलिस"; | रेफरेंस टाइप, immutable |
object | सभी प्रकार का बेस | object obj = 123; | object डेटा = "नमस्ते"; | किसी भी प्रकार को रख सकता है |
decimal | सटीक दशमलव | decimal पैसा = 100.50m; | decimal मूल्य = 19.99m; | वित्तीय मान |
float | सिंगल प्रिसिजन | float f = 1.23f; | float दर = 0.05f; | कम सटीकता |
long | 64-बिट पूर्णांक | long l = 1234567890L; | long दूरी = 5000000000L; | बड़े नंबर |
short | 16-बिट पूर्णांक | short s = 32000; | short तापमान = 150; | कंपैक्ट वैल्यू |
byte | 8-बिट पूर्णांक | byte b = 255; | byte उम्र = 25; | स्मृति कुशल |
sbyte | 8-बिट साइन | sbyte sb = -128; | sbyte ऑफ़सेट = -50; | कम उपयोग में |
uint | 32-बिट unsigned | uint u = 4000; | uint गिनती = 1000; | केवल पॉज़िटिव |
ulong | 64-बिट unsigned | ulong ul = 100000; | ulong बड़ा_मान = 1000000; | बड़े पॉज़िटिव |
ushort | 16-बिट unsigned | ushort us = 60000; | ushort ऊंचाई = 55000; | छोटे पॉज़िटिव |
int? | Nullable int | int? x = null; | int? परिणाम = null; | मान null हो सकता है |
List<T> | Generic List | List<int> numbers = new List<int>(); | List<string> नाम = new List<string>(); | Dynamic Collection |
Dictionary\<K,V> | Key-Value Collection | Dictionary\<string,int> dict = new Dictionary\<string,int>(); | Dictionary\<string,string> राज्य = new Dictionary\<string,string>(); | Map Key-Value |
Array | Fixed Size Array | int\[] arr = new int\[5]; | string\[] फल = { "सेब", "केला" }; | Index Access |
Tuple | Immutable Tuple | var tuple = Tuple.Create(1,"A"); | var व्यक्ति = Tuple.Create("अलिस",25); | Temporary Group |
var | Type Inference | var x = 10; | var कुल = 100; | Auto-detected type |
dynamic | Dynamic Type | dynamic obj = 1; | dynamic मान = "नमस्ते"; | Type checked at runtime |
object\[] | Array of objects | object\[] arr = new object\[5]; | object\[] items = {1,"A",true}; | Mixed types |
StringBuilder | Mutable String | StringBuilder sb = new StringBuilder(); | StringBuilder sb = new StringBuilder("नमस्ते"); | Large strings |
DateTime | Date & Time | DateTime dt = DateTime.Now; | DateTime आज = DateTime.Today; | Immutable |
TimeSpan | Time Interval | TimeSpan ts = new TimeSpan(1,2,3); | TimeSpan अवधि = TimeSpan.FromHours(5); | Difference of two dates |
Guid | Global Unique ID | Guid id = Guid.NewGuid(); | Guid token = Guid.NewGuid(); | Object identification |
📊 Complete C# Properties Reference
Property | Values | Default | Description | C# Support |
---|---|---|---|---|
int.MaxValue | 2147483647 | 2147483647 | int का अधिकतम मान | सभी संस्करण |
int.MinValue | -2147483648 | -2147483648 | int का न्यूनतम मान | सभी संस्करण |
double.NaN | NaN | NaN | Not-a-Number | सभी संस्करण |
double.PositiveInfinity | Infinity | Infinity | +∞ को प्रदर्शित करता है | सभी संस्करण |
double.NegativeInfinity | -Infinity | -Infinity | -∞ को प्रदर्शित करता है | सभी संस्करण |
bool.TrueString | "True" | "True" | true का टेक्स्ट प्रतिनिधित्व | सभी संस्करण |
bool.FalseString | "False" | "False" | false का टेक्स्ट प्रतिनिधित्व | सभी संस्करण |
string.Empty | "" | "" | खाली स्ट्रिंग | सभी संस्करण |
🧠 अपने ज्ञान की परीक्षा करें
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी