जवाबों:
यहाँ अलग-अलग उत्तरों के दो अलग-अलग अर्थ हैं।
आप देखना चाहते हैं तो एक उदाहरण के है कि क्या एक सही प्रकार तो
if (c.GetType() == typeof(TForm))
जाने का रास्ता है।
यदि आप जानना चाहते हैं कि क्या cएक उदाहरण TForm या एक उपवर्ग है तो उपयोग करें is/ as:
if (c is TForm)
या
TForm form = c as TForm;
if (form != null)
यह आपके मन में स्पष्ट है कि इनमें से कौन सा व्यवहार आप वास्तव में चाहते हैं।
isऔर asपैटर्न मिलान के साथ:if (x is TForm tf) {…
if(c is TFrom)
{
// Do Stuff
}
या यदि आप cएक के रूप में उपयोग करने की योजना बनाते हैं TForm, तो निम्न उदाहरण का उपयोग करें:
var tForm = c as TForm;
if(tForm != null)
{
// c is of type TForm
}
दूसरे उदाहरण केवल देखने हेतु जांचने की जरूरत है cप्रकार का है TFormएक बार। यदि आप देखते हैं कि यदि जाँच करें कि क्या cप्रकार है, TFormतो इसे डालें, सीएलआर एक अतिरिक्त जाँच से गुजरता है। यहाँ एक संदर्भ है ।
संपादित करें: जॉन स्कीट से चोरी
आप बनाना चाहते हैं यकीन है कि cकी है TFormऔर नहीं किसी भी वर्ग से इनहेरिट TForm, तो उपयोग
if(c.GetType() == typeof(TForm))
{
// Do stuff cause c is of type TForm and nothing else
}
हां, "कीवर्ड" है:
if (c is TForm)
{
...
}
MSDN पर विवरण देखें: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
जाँचता है कि क्या कोई वस्तु किसी प्रकार से संगत है। उदाहरण के लिए, यह निर्धारित किया जा सकता है कि क्या कोई वस्तु स्ट्रिंग प्रकार के साथ संगत है:
इसके अलावा, कुछ हद तक एक ही नस में
Type.IsAssignableFrom(Type c)
"सही है अगर c और वर्तमान प्रकार एक ही प्रकार का प्रतिनिधित्व करते हैं, या यदि वर्तमान प्रकार c की वंशानुक्रम पदानुक्रम में है, या यदि वर्तमान प्रकार एक इंटरफ़ेस है जो c लागू होता है, या यदि c एक सामान्य प्रकार का पैरामीटर और वर्तमान प्रकार है सी की बाधाओं में से एक का प्रतिनिधित्व करता है। "
यहाँ से: http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
typeof(Class).IsAssignableFrom(object.getType())जावा instanceofऑपरेटर के समान ।
T1.IsAssignableFrom(T2)रिटर्न trueजहां asऑपरेटर गैर-शून्य मान लौटाता है, उन प्रकारों के उदाहरण दिए गए हैं।
जैसा कि दूसरों ने उल्लेख किया है, "कीवर्ड" है। हालाँकि, यदि आप बाद में इसे उस प्रकार से डालने जा रहे हैं, जैसे।
TForm t = (TForm)c;
फिर आपको "as" कीवर्ड का उपयोग करना चाहिए।
जैसे TForm t = c as TForm.
तब आप जांच कर सकते हैं
if(t != null)
{
// put TForm specific stuff here
}
के साथ गठबंधन मत करो क्योंकि यह एक डुप्लिकेट चेक है।
bool isValid = c.GetType() == typeof(TForm) ? true : false;
या सरल
bool isValid = c.GetType() == typeof(TForm);
==) से बचना होगा । विरासत का समर्थन करने वाली वस्तु या उन्मुख भाषाओं में जब तक आप यह नहीं जानते कि आपके विशिष्ट प्रकार को कभी भी sealedकक्षा के लिए विरासत में नहीं मिलेगा । इसके अलावा: एक टर्नरी ऑपरेटर की वापसी (स्थिर / स्थिर) बूलियन मूल्यों का उपयोग मुझे परेशान करता है, अगर यह एक switchबयान था तो मैं कम परेशान होऊंगा ।
instanceofऔर C # केisबेहतर तरीके हैं।