typeof
संकलन समय पर ज्ञात एक प्रकार के नाम पर लागू होता है। इसे जेनेरिक टाइप पैरामीटर पर भी लागू किया जा सकता है। GetType
रनटाइम पर किसी ऑब्जेक्ट पर लागू होता है। दोनों स्थितियों में परिणाम System.Type
प्रकार का एक वस्तु है जिसमें एक प्रकार पर मेटा-सूचना होती है।
यदि आपके पास
string s = "hello";
इन दो पंक्तियों को वैध
Type t1 = typeof(string);
Type t2 = s.GetType();
और यह तुलना पैदावार true
t1 == t2 ==> true
लेकिन
कर रहे हैं
object obj = "hello";
इन दो पंक्तियों को मान्य हैं
Type t1 = typeof(object);
Type t2 = obj.GetType(); // ==> string!
और यह तुलना पैदावार false
t1 == t2 ==> false
यानी, चर obj
का संकलन समय प्रकार (स्थिर प्रकार) नहीं क्रम रूप में ही है obj
द्वारा संदर्भित ऑब्जेक्ट का प्रकार (गतिशील प्रकार) टाइप करें। (यहाँ "डायनामिक" कीवर्ड dynamic
कोई लेना देना नहीं है!)
परीक्षण प्रकार
अगर, हालांकि, आप केवल जानने के लिए कि mycontrol
एक TextBox
तो आप बस
परीक्षण कर सकते हैं चाहता हूँ
if (mycontrol is TextBox)
ध्यान दें कि यह पूरी तरह से
के बराबर नहीं है
क्योंकि mycontrol
में एक प्रकार का प्रकार हो सकता है जो TextBox
से लिया गया है। उस मामले में पहली तुलना true
और दूसरा false
उत्पन्न करती है! सबसे पहले और आसान संस्करण अधिकांश मामलों में ठीक है, क्योंकि TextBox
से प्राप्त नियंत्रण में TextBox
सबकुछ प्राप्त होता है, शायद इसमें अधिक जोड़ता है और इसलिए TextBox
पर असाइनमेंट असाइनमेंट है।
public class MySpecializedTextBox : TextBox
{
}
MySpecializedTextBox specialized = new MySpecializedTextBox();
if (specialized is TextBox) ==> true
if (specialized.GetType() == typeof(TextBox)) ==> false
कास्टिंग
आप निम्नलिखित परीक्षण एक डाली से पालन किया है और टी नल है ...
if (obj is T) {
T x = (T)obj; // The casting tests, whether obj is T again!
...
}
... आप इसे बदल सकते हैं। ..
T x = obj as T;
if (x != null) {
...
}
यह जांच कर रहा है कि कोई मान किसी दिए गए प्रकार और कास्टिंग का है (जिसमें यह वही परीक्षण शामिल है) दोनों लंबे विरासत श्रृंखलाओं के लिए समय ले सकते हैं। as
ऑपरेटर का उपयोग करके null
के लिए एक परीक्षण के बाद अधिक प्रदर्शन किया जा रहा है।
सी # 7 से शुरू हो रहा है।0 आप पैटर्न मिलान का उपयोग करके कोड को सरल बना सकते हैं:
if (obj is T t) {
// t is a variable of type T
...
}
इस काम से आपका क्या मतलब है ... और यह नहीं ...? –
@ anouar204: उन्हें अपने आईडीई में आज़माएं। –
'compile'' काम नहीं करता है 'काम' –