2009-02-18 11 views
6

मैंने .NET परावर्तक में Int32.GetHashCode() में डिस्सेम्बल कोड को देखते हुए "यह" कीवर्ड का यह दिलचस्प उपयोग देखा:क्या "यह" कीवर्ड मूल्य प्रकारों के साथ उपयोग किया जा सकता है?

public override int GetHashCode() 
{ 
    return this; 
} 

मैंने हमेशा सोचा कि "यह" केवल संदर्भ प्रकारों के साथ उपयोग नहीं किया जाता है । उपर्युक्त कोड में, जब भी आप int के हैश कोड प्राप्त करने का प्रयास करते हैं तो मुक्केबाजी का उपयोग हर बार किया जाएगा?

एमएसडीएन में "इस" कीवर्ड के दस्तावेज़ीकरण से: - यह कीवर्ड क्लास

के वर्तमान उदाहरण को संदर्भित करता है

उत्तर

12

हाँ, this मूल्य प्रकार के लिए मान्य है की वर्तमान उदाहरण के लिए संदर्भित करता :

MSDN में "इस" कीवर्ड के प्रलेखन से

। यह मुक्केबाजी का कारण नहीं है। हालांकि यह मान-प्रकार का संदर्भ देता है, यह संदर्भ-प्रकार संदर्भों के समान ही संदर्भ में संदर्भ नहीं है - यह रनटाइम संदर्भ की बजाय संकलन/विकास समय सुविधा है।

सी # विशिष्टता की धारा 7.5.7 राज्यों:

  • जब यह एक struct का एक उदाहरण निर्माता के भीतर एक प्राथमिक अभिव्यक्ति में प्रयोग किया जाता है, यह एक चर के रूप में वर्गीकृत किया जाता है। वैरिएबल का प्रकार उदाहरण (§10.3.1) है जिसमें उपयोग होता है, और परिवर्तनीय संरचना निर्मित संरचना का प्रतिनिधित्व करता है। एक struct के उदाहरण निर्माता की इस चर वास्तव में struct टाइप में विशेष के बाहर पैरामीटर के समान व्यवहार करती है, इसका मतलब है कि चर निश्चित रूप से उदाहरण निर्माता के हर निष्पादन पथ में सौंपा जाना चाहिए ।

  • जब यह एक struct के उदाहरण विधि या उदाहरण एक्सेसर के भीतर एक प्राथमिक अभिव्यक्ति में प्रयोग किया जाता है, यह एक चर के रूप में वर्गीकृत किया जाता है। वेरिएबल का प्रकार संरचना का उदाहरण प्रकार (§10.3.1) है जिसमें उपयोग होता है।
    • तो विधि या एक्सेसर एक इटरेटर (§10.14) नहीं है, यह चर struct जिसके लिए विधि या एक्सेसर लागू किया गया था का प्रतिनिधित्व करता है, और वास्तव में एक रेफरी पैरामीटर के समान व्यवहार करती है संरचना प्रकार के। विधि या एक्सेसर पुनरावर्तक है
    • हैं, तो इस चर struct जिसके लिए विधि या एक्सेसर लागू किया गया था की एक प्रति का प्रतिनिधित्व करता है, और struct के एक मूल्य पैरामीटर के रूप में बिल्कुल वैसा ही व्यवहार करती है प्रकार।
+0

धन्यवाद एक बहुत है, मैं अपने प्रश्न को जोड़ने के बाद एक ही अनुभाग भर में आया था।प्रश्न पूछने से पहले मुझे विनिर्देश की जांच करनी चाहिए थी। –

+0

कोई समस्या नहीं - एक बार जब आप इसे जानते हैं तो सबकुछ आसान लगता है। :) –

संबंधित मुद्दे