संभव डुप्लिकेट:
Type Checking: typeof, GetType, or is?GetType() और typeof() का उपयोग कर प्रकार प्राप्त करने का क्या अंतर है?
कौन सा एक प्रकार प्राप्त करने के लिए पसंदीदा तरीका है?
संभव डुप्लिकेट:
Type Checking: typeof, GetType, or is?GetType() और typeof() का उपयोग कर प्रकार प्राप्त करने का क्या अंतर है?
कौन सा एक प्रकार प्राप्त करने के लिए पसंदीदा तरीका है?
आप केवल typeof()
का उपयोग कर सकते हैं जब आप संकलन समय पर उस प्रकार को जानते हैं, और आप संबंधित Type
ऑब्जेक्ट प्राप्त करने का प्रयास कर रहे हैं। (हालांकि टाइप एक सामान्य प्रकार पैरामीटर हो सकता है, उदाहरण के लिए typeof(T)
एक प्रकार के पैरामीटर T
के साथ कक्षा में।) typeof
का उपयोग करने के लिए उपलब्ध उस प्रकार के किसी भी उदाहरण की आवश्यकता नहीं है। typeof
के लिए ऑपरेंड हमेशा नाम एक प्रकार या प्रकार पैरामीटर का होता है। यह एक चर या ऐसा कुछ भी नहीं हो सकता है।
अब object.GetType()
के साथ तुलना करें। इससे उस वस्तु का वास्तविक प्रकार प्राप्त होगा जिसे इसे बुलाया जाता है। इसका मतलब यह है:
GetType
)एक अजीब बिंदु: GetType
अप्रत्याशित दे देंगे जवाब मुक्केबाजी के काम के तरीके के कारण शून्य मूल्यों पर। GetType
पर कॉल हमेशा मुक्केबाजी किसी भी मूल्य प्रकार सहित, एक शून्य मूल्य मान सहित, और एक शून्य मूल्य प्रकार के बॉक्स किए गए मान को एक शून्य संदर्भ या गैर-शून्य मूल्य प्रकार के उदाहरण के संदर्भ में शामिल किया जाएगा।
GetType() रनटाइम पर काम करता है, typeof() एक संकलन-समय ऑपरेटर है।
तो,
// untested, schematic
void ShowType(Object x)
{
Write(x.GetType().Name); // depends on actual type
// typeof(x) won't actually compile
Write(typeof(x).Name); // always System.Object
}
ShowType("test");
System.String और System.Object प्रिंट होगा।
एक बेहतर उदाहरण के लिए this question देखें।
गेटटाइप ऑब्जेक्ट पर वर्चुअल विधि है - इसका मतलब है कि किसी वर्ग का उदाहरण दिया गया है, तो आप संबंधित प्रकार ऑब्जेक्ट को पुनर्प्राप्त कर सकते हैं।
टाइपोफ एक सी # ऑपरेटर है - इसका उपयोग संकलन समय लुकअप करने के लिए किया जाता है यानी क्लास नाम का प्रतिनिधित्व करने वाले प्रतीक को देखते हुए, इसके लिए टाइप ऑब्जेक्ट पुनर्प्राप्त करें।
if (typeof(String) == "test".GetType())
यह बिल्कुल वैसा ही नहीं है, और समस्या प्रकट होता है जब आप विरासत का उपयोग करें।
आईई।: Page
से
WebPage1
इनहेरिट करती है, और यह एक Object
से भी विरासत, इसलिए यदि आप (new WebPage1()).GetType() == typeof(object)
के लिए परीक्षण यह गलत वापस आ जाएंगे, क्योंकि प्रकार विभिन्न रहे हैं, लेकिन जब आप is
ऑपरेटर यह सच है मदद से इसका परीक्षण। क्योंकि (new WebPage1())
प्रकार WebPage1
की एक वस्तु एक Page
और एक object
है, और यह भी
((new WebPage1()) is object)
सच है।
प्रकार भिन्न हो सकते हैं, लेकिन is
चेक करता है यदि आप इस प्रकार पर सुरक्षित रूप से डाली जा सकते हैं।
दरअसल, 'टाइपोफ़' का उपयोग किसी उदाहरण के साथ नहीं किया जा सकता है, इसलिए टाइप टाइप (x) 'संकलित नहीं होगा। –
@ रोमेन: आप सही हैं, एक टिप्पणी जोड़ा। आप जेनेरिक विधि का उपयोग करके इसे कुछ हद तक प्रदर्शित कर सकते हैं। –
टाइपऑफ (उदाहरण) संकलित नहीं होगा? – Gishu