object टाइप
- C# कॉमन टाइप सिस्टम (CTS) में सभी टाइप्स का अल्टीमेट बेस क्लास
System.Objectका एलियास- किसी भी वैल्यू टाइप, रेफरेंस टाइप को होल्ड कर सकता है
- टाइप चेकिंग कंपाइल टाइम पर (बॉक्सिंग/अनबॉक्सिंग के साथ)
- मेंबर्स एक्सेस करने के लिए कास्टिंग आवश्यक
object obj = 100; // बॉक्सिंग
int val = (int)obj; // अनबॉक्सिंग - कास्ट आवश्यक
obj = "Hello"; // रेफरेंस टाइप
dynamic टाइप
- C# 4.0 में प्रस्तुत
- टाइप चेकिंग रनटाइम पर (DLR - डायनामिक लैंग्वेज रनटाइम)
- कंपाइलर ऑपरेशन्स/प्रॉपर्टीज की जांच नहीं करता
- रनटाइम पर त्रुटि यदि मेंबर मौजूद नहीं
- COM इंटरऑप, डायनामिक लैंग्वेज, JSON पार्सिंग के लिए उपयोगी
dynamic dyn = 100;
dyn = "Hello"; // कोई त्रुटि नहीं
dyn = new List(); // कोई त्रुटि नहीं
Console.WriteLine(dyn.Count); // रनटाइम पर काम करेगा यदि Count मौजूद
// dyn.NonExistentMethod(); // रनटाइम पर RuntimeBinderException
तुलना तालिका
| पहलू | object | dynamic |
|---|---|---|
| टाइप चेकिंग | कंपाइल टाइम | रनटाइम |
| कास्टिंग | आवश्यक | आवश्यक नहीं |
| इंटेलिसेंस | उपलब्ध | उपलब्ध नहीं |
| परफॉर्मेंस | तेज (बॉक्सिंग के अलावा) | धीमा (DLR ओवरहेड) |
| उपयोग केस | सामान्य ऑब्जेक्ट रेफरेंस | इंटरऑप, रिफ्लेक्शन विकल्प |
वर बनाम डायनामिक:
var - कंपाइल टाइम पर इनफर होता है, स्टैटिकली टाइप्ड। dynamic - रनटाइम पर रिजॉल्व होता है।